2009-09-22 3 views
2

У меня возникли проблемы с преобразованием определенных символов из XML-канала в XHTML.Выход HTML через преобразование XSL с использованием специальных символов

Я использую следующий пример, чтобы продемонстрировать проблему.

Вот мой XML-файл:

<?xml version="1.0" encoding="UTF-8"?> 
<paragraph>some text including the –, ã and ’ characters</paragraph> 

Вот XSLT Я подаю:

<?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" 
      encoding="UTF-8" 
      indent="yes" 
      doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
      doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" /> 
    <xsl:template match="paragraph"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
      <head></head> 
      <body> 
     <p><xsl:apply-templates/></p> 
      </body> 
     </html> 
</xsl:template> 
</xsl:stylesheet> 

Вот результирующий XHTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head></head> 
    <body> 
    <p>some text including the –, ã and ’ characters</p> 
    </body> 
</html> 

Характеры от оригинала XML заменяются новыми.

Во-первых, я хочу проверить, что что-то не так с моей кодировкой, которая вызывает эту проблему?

Я должен что-то делать с помощью сущностей, если я хочу отображать специальные символы для правильного отображения в XHTML? Если да, то как я могу использовать их в XSLT и мне нужно знать каждое возможное значение, которое может быть в моем XML-канале заранее?

+5

Результирующий XHTML очень похож на файл UTF-8, который был открыт редактором, который ожидал ISO-8859-1 или аналогичный 8-битный формат (удвоенные символы отдают его). Взгляните на него, используя шестнадцатеричный дамп, и я уверен, что вы увидите, что преобразование работало так, как ожидалось. – kdgregory

ответ

10

Я согласен с kdgregory: выходной файл выглядит в UTF-8, но его читатель думает, что он что-то еще (ISO-8859-1 или CP-1252 (по умолчанию для Windows)). Попробуйте добавить тип контента непосредственно в элемент заголовка HTML:

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 

и посмотрите, поможет ли это.

+0

Это делает файл рендеринга корректным в браузере, спасибо. Это также объясняет, почему оно отображается правильно в некоторых браузерах, но не в других. – tentonipete

0

Это может показаться глупым, но вы уверены, что файл xml на самом деле является utf-8? Одно дело положить его в пролог, но сам файл может использовать другую кодировку.

+0

Я использовал XMLSpy для создания файла, и я считаю, что он использует стандарт UTF-8. Я даже заново создал его в «Блокноте», в частности, как UTF-8, чтобы убедиться. – tentonipete

+0

И выходной файл? Возможно, инструмент xsl, который вы используете, виноват здесь. –