Чтобы расширить ответ кто-то дал:
Есть две возможности:
- Файл действительно, закодированные как
UTF-8
, но интерпретируется вашим XML Parser, как ISO-8859-1
.
- Файл действительно закодирован как
ISO-8859-1
, но интерпретируется вашим XML-парсером как UTF-8
.
Чтобы определить, что именно происходит, посмотрите, что происходит с é
в Sébastien
. Есть две возможности, я могу себе представить:
- «
é
» превращается в два разных персонажей - вероятно, «Ã©
»
- «
é
» становится одной нонсенс CHARACT или «?
», и, возможно, «b
» также отсутствует от имени Sébastien
.
В первом случае ваш файл не тот, который вы так считаете. (Он попадает в вашу программу как данные UTF-8
, но ваша программа пытается интерпретировать ее как ISO-8859-1
). Посмотрите на файл xml с шестнадцатеричным редактором или еще что-нибудь, что может показать вам, что такое байты на диске.
Во втором случае я проверил, как HTTP-сервер на localhost обслуживает этот файл. (Ваша программа получает байт в формате ISO-8859-1
, но интерпретирует их как UTF-8
) Самый простой способ сделать это на окнах, чтобы открыть cmd
незамедлительное, и выполните команду: telnet localhost 80
Когда что всплывает окно, введите следующую строку (или вырезать-вставить из stackoverflow) и нажмите дважды. Предупреждение: вы не сможете увидеть, что вы печатаете, а капитализация важна.
GET /Test/person.xml HTTP/1.0
В ответе, обратите внимание на строку, начинающуюся с Content-Type
. Это скажет вам, как веб-сервер локально обслуживает файл.
Update: Посмотрев на свой файл, он на самом деле изо-8859-1, так что я хотел бы предложить устанавливает атрибут .Encoding вашего Webclient
например, как так, прежде чем сказать ему, чтобы загрузить файл:
client.Encoding = System.Text.Encoding.GetEncoding("iso-8859-1")
в качестве альтернативы, вы можете использовать DownloadBytes
методы вместо тех DownloadString
методов, а затем разобрать байты в файле XML. В настоящее время проблема заключается в том, что к тому моменту, когда парсер xml получает содержимое файла, байты уже интерпретируются как строка, поэтому слишком поздно менять кодировку.
Как вы получили файл XML в документ? – lavinio
Можете ли вы более конкретно узнать о «странных персонажах», которые вы видите? Как вы проверяете значения переменных во время выполнения? –