Как мне указать, какую версию UTF-8 я хочу (на Java)? - PullRequest
0 голосов
/ 08 июля 2011

Из-за некоторого неуклюжего унаследованного кода мне нужно передать неанглоязычный текст в виде строк ansi / ascii, которые визуально кодируются в UTF-8. По большей части, это работает хорошо (я использую URLEncoder). Однако теперь мне нужно, чтобы он мог выводить разные версии UTF-8 при разных обстоятельствах, и я не знаю, как это сделать.

Например, этот символ может быть в кодировке UTF-8 следующими способами:

大
%u5927
大
%E5%A4%A7

Но ничего не говорит о разных версиях, как будто нет никакой разницы. Я знаю, что URLEncoder не выполняет вторую версию, потому что & является зарезервированным символом, но в некоторых случаях мне нужен второй. Как я могу преобразовать текст в нужную мне версию?

В частности, он передается в .jsp, который содержит библиотеку с именем displaytag, которая обрабатывает данные и отображает таблицу без особого ввода со стороны разработчика, но, похоже, у нее нет параметров для настройки кодировки. Я знаю, что вторая кодировка (переданная как ansi / ascii) в приведенном выше списке корректно отображается без изменения .jsp, что является для меня самым безопасным вариантом. Мне просто нужно это понять.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Во-первых, это кодовая точка Unicode в шестнадцатеричном формате, закодированная в URL-адресе, во-вторых, в десятичном и том же виде в виде сущности HTML / XML.

Никогда не использовала ее для своих целей, но я думаю StringEscapeUtils escapeHtml или escapeXml должны дать вам вторую форму.

Кстати, вторая форма также имеет шестнадцатеричную версию: 大

Третий выглядит как преобразование с помощью функции, не поддерживающей utf-8который преобразовал три байта, которые в utf-8 составляют отдельную кодовую точку отдельно.Третий, на мой взгляд, неверен, потому что вы не можете увидеть, три ли это байта ascii или что это действительно utf-8.

0 голосов
/ 08 июля 2011

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

Вы уже понимаете, что то, что хранится в памяти или в файлах, представляет собой последовательности байтов, чистые и простые, икаким-то образом у вас есть трехбайтовая последовательность e5 a4 a7, потому что именно так кодируется символ OOKII HAJIME OOINI (大) в UTF-8.

Чтобы поместить этот символ в URL с помощью Java, тогда да, выиспользуйте URLEncoder и вы получите% E5% A4% A7.Но если вы хотите отобразить его в JSP, то я бы определенно рекомендовал сущность HTML 大, поскольку конечные пользователи не будут настраивать кодировку символов своего браузера, чтобы связываться с вашим потоком байтов, если вы решите отправитьнеобработанные байты UTF-8.

То, как вы это сделаете, зависит от того, хранятся ли ваши данные в виде байтового массива или реальной строки Java.Как правило, для вывода числовых сущностей HTML вы можете сделать это программно, превратив каждый символ с кодовой точкой выше 7F в символы вида

& # x codepoint ;

или найти в Интернете библиотеку, которая сделает это за вас.Вероятно, больше работы, если вы обрабатываете байтовый массив, но это можно сделать.StringEscapeUtils от Commons Lang обрабатывает известные именованные объекты, но я не верю, что он создаст числовые объекты HTML для символов с большими кодами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...