неправильный синтаксический анализ Java для не-ASCII символов - PullRequest
1 голос
/ 13 октября 2011

Я использую Java-апплет для просмотра файлов / папок на удаленном сервере (ftp / cifs). Проблема заключается в том, что если папка на удаленном сервере названа не в формате ascii (скажем, на японском или китайском языке), апплет не запустится. Я проследил проблему, которая возникает из-за неправильного разбора строки не-ascii в ответе сервера. Ниже приведен фрагмент XML-ответа от сервера.

<?xml version="1.0" encoding="utf-8" ?><a:multistatus xmlns:b="urn:uuid:/" xmlns:c="xml:" xmlns:a="DAV:">
<a:response><a:href>https://xx.xx.xx.xx/folder/äèä¸?能正常工作</a:href><a:propstat><a:status>HTTP/1.1 200 OK</a:status>

Кодировка кодировки с сервера запрашивается как utf-8, как указано выше. Строка для поиска мусора - это удаленная веб-папка, которую я пытаюсь просмотреть с помощью апплета, папка на самом деле называется 不能 正常 工作. Так как они не эквивалентны (фактическое имя папки и имя в xml), при разборе java xml возникает ошибка при попытке запуска апплета. Пожалуйста, предложите, что можно сделать, чтобы это исправить. Также я не использую парсер SAX, я использую парсер XML, а затем создаю объект DOM

1 Ответ

0 голосов
/ 13 октября 2011

Похоже, что опубликованный вами XML содержит мусорные символы. Я имею в виду, что эти символы Юникода были искажены во время самого создания. Поэтому первое, что нужно проверить, это убедиться, что вы используете правильный вариант API, который принимает charset в качестве параметра, и используете UTF-8 в качестве параметра в этих местах. На сервере, а также на клиенте просто дважды проверьте API , Например, если вы создаете InputStreamReader где-либо, убедитесь, что вы используете InputStreamReader (InputStream in, Charset cs) и т. Д.

...