Этот вопрос был затронут во многих дискуссиях, и все же мы по-прежнему видим, как появляются новые. Мой сценарий выглядит следующим образом:Кодировка символов Java, преобразование ISO в UTF
Рамка Java работает на сервере Linux, где UTF-8 является кодировкой символов по умолчанию в JVM. Структура состоит из некоторых служб, получающих сообщения Tibco RV для обработки. И некоторые из этих сообщений содержат символы не ASCII и отправляются с сервера Windows, а ISO8859-1 - это кодировка, используемая при создании сообщения. Теперь, когда данные извлекаются из сообщения Tib rv, проблемные поля «поступают» как объекты Java и должны быть переданы в строки ... И здесь я еще не смог извлечь строки ISO8859-1, содержащие не ASCII-символы (шведский) å "," ä "," ö ") в строку UTF-8. Я попытался с помощью следующих методов:
String isoStreet = new String(response.get("street").toString().getBytes(StandardCharsets.ISO_8859_1),java.nio.charset.StandardCharsets.UTF_8);
, и я также попытался использовать кодеры/декодеры в java.nio пакета без успеха.
Что также интересно, так это то, что я использую PuttY для подключения к серверу, где службы хостены и работают. И оттуда у меня есть возможность сделать прямой запрос Tibco rv из оболочки (используя клиент tibcorvsend), и кажется, что мне нужно установить удаленный набор символов в ISO8859-1 в PuttY (Window_> Перевод), прежде чем войти в сервер и сделать запрос Tib rv - когда это будет сделано, те, которые не указаны в ASCII-символах, указаны в ответе, независимо от того, какую кодировку я установил на удаленном сервере Linux. Использование 'export LC_ALL = en_US.UTF-8' или 'export LC_ALL = sv_SE.iso88591' не имеет значения в этом случае ... только то, что удаленное кодирование, которое я установил в PuttY ...
Thsi должно подразумевать, что ответное сообщение кажется ОК, и, по крайней мере, оболочка может выводить правильные символы. Но когда внутри Java VM (с использованием Java-сервисов) я думаю, что поля ответов тихо вставляются в строки при отладке и просмотре объекта ответа (не желая этого преобразования в строки) в режиме просмотра просмотра ... не уверен, что вы могли бы следовать за мной на этом , если не я могу попытаться быть более ясным, если это необходимо ...
Любой вход по этой проблеме, любой
с уважением /R
Спасибо за ответ ... Одна из проблем заключается в том, что я не влияю на то, как создается ответ, который мы получаем. Это внешняя система, LDAP-сервер, работающий на сервере Windows. response.get ("fieldName") вернет объект (или поле null, если в ответе ответа Tibco нет) Но это фактически поле String - все поля в сообщении Tibco RV отправляются как объекты, но объекты больше контейнеров строк, целых чисел и т. д. Тем не менее, не знаю, как получить эти символы из ответного сообщения в строку Java (или байт []) –
Хм, не уверен, что это был правильный способ дать ответ на ваш ответ ... возможно, я должен Вместо этого вы отправили ответ? –
Вам нужно будет проанализировать свой код и узнать, что именно помещено в сообщении, и что именно вы выбрали из него. Надеюсь, мой ответ поможет вам понять кодировки символов, чтобы вы могли эффективно решить эту проблему. – Jesper