Bu sorun zaman zaman meydana geliyor, yani bu sorun olmadan birçok xslt dönüşümü gerçekleştirdim, sonra en son xslt dönüşümü sırasında aniden ortaya çıktı. xslt, utf-8 karakterlerini farklı bir kodlamaya dönüştürür
aşağıdaki a.html benzer bir yapıya sahip html girdi dosyalarının çok sayıda var:<html>
<body>
<div class="wrd">
<div class="wrd-id">5</div>
<div class="wrd-wrd">address</div>
<div class="wrd-ipa">əˈdres,ˈaˌdres</div>
</div>
<div class="a">...</div>
</body>
</html>
Ben şu bir sonuç almak girdi dosyalarının kodlamasını kontrol Ne zaman:
file -I a.html
a.html: text/html; charset=utf-8
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8" />
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()" >
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="div[@class='a']" >
<xsl:apply-templates select="*|node()" />
</xsl:template>
</xsl:stylesheet>
I:
aşağıdaki a.xslt benzer bir XSLT ile html dosyalarını dönüştürmek Aşağıdaki
#!/bin/bash
xsltproc --html a.xslt a.html > b.html
daha tam bash komut edilir: Aşağıdaki A.Ş benzer bir komut dosyası kullanmak
#!/bin/bash
xsltproc --html a.xslt a.html \
| hxnormalize -x -l 1024 \
| sed '/^$/d' \
> b.html
Ve şu sonuç b.html edinin:
<html>
<body>
<div class="wrd">
<div class="wrd-id">5</div>
<div class="wrd-wrd">address</div>
<div class="wrd-ipa">ÉËdres,ËaËdres</div>
</div>
...
</body>
</html>
Aslında, çıkışım, kopyalayıp yapıştıramayacağım birkaç baş aşağı soru işareti içeriyor. UTF-8 karakter kümesine ait giriş karakterleri başka bir şeye dönüşmüş
aşağıdaki resme bakın. Ben şu sonucu elde dosya b.html kodlamasını kontrol ettiğinizde
:
file -I b.html
b.html: text/html; charset=utf-8
nasıl başka bir kodlama benim karakterleri değiştirmek için bir xslt dönüşümü önleyebiliriz?
Xsltproc komutundan "--html" seçeneğini kaldırarak GÜNCELLEME 1
, sorun giderilmiştir. Ancak hala neden emin değilim.
#!/bin/bash
xsltproc a.xslt a.html > b.html
GÜNCELLEME 2
girdi dosyası ASCII veya ISO-8859-1 yerine UTF-8 olarak yorumlanır görünüyor.
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html">
</head>
çıkış b.html hala aynı Ancak: giriş a.html aşağıdaki başlık takılmış.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
farklı xsl fark edin: çıktı hattını
Bu b oluşturur
GÜNCELLEME 3
ben güncelleme aşağıdaki için a.xslt var.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
Belki geride burada ASCII veya ISO-8859-1 girdi dosyasını yorumlamak için kullanılır nedeni vardır: aynı sorunu ancak ilk satır ile html aşağıdaki html beyanı verir.
Teşekkür ederiz. Çok yardımcı bir cevap. – Jagger
Aslında, meta bilgisi html dosyasında yoksa, girdi dosyasının kodlamasını belirlemenizi sağlayan '–encoding' parametresinin olduğunu tespit ettim. – Jagger