2015-09-11 3 views
2

Я звоню службу, ошибки, говоря мне есть проблема кодирования с ниже строки:Проблема с кодировкой UTF8?

Universal®

Это мое понимание того, что эта строка «utf8» закодирован. Является ли это правильным пониманием кодировки utf8? Если да, то это означает, что я должен удалить кодировку utf8? Если да, то любые предложения о том, как я могу де-кодировать строку utf8 в Java?

Или я ошибаюсь, и указанная выше строка не кодируется utf8? Если да, то какие-либо предложения по его кодированию?

+2

«проблема с кодировкой» - можете ли вы быть более конкретным? Не отображается ли оно должным образом, или он дал вам конкретную ошибку? – Sh4d0wsPlyr

+0

Извините, это часть моей проблемы, ошибка, которую я получаю, является именно такой расплывчатой. В нем говорится «Проблема кодирования». Вот почему мне интересно, подразумевает ли это, что я закодирован в utf8, когда мне этого не должно быть, или что я не кодирован utf8, и я должен быть. – ab11

+0

«вызов службы» - как? МЫЛО? вызов метода java? – blank

ответ

5

Как Java хранит строку, это не то же самое, что она кодируется в сообщениях. Вы можете попробовать что-то вроде:

String s = "Universal®"; 
byte[] encoded = s.getBytes(Charset.forName("UTF-8")); 

Вы должны поймать UnsupportedCharsetException, но UTF-8 является стандартом доступен набор символов.

Или вам может потребоваться установить кодировку в отправляющем API, например, в HTTP Content-Type: text/plain; charset=UTF-8.

+5

Для Java 7+ вы можете использовать 'StandardCharsets.UTF_8' вместо' Charset.forName («UTF-8») ' – Andreas

+0

@Andreas Sweet! Я не понял этого изменения. Теперь мне не нужно раздражаться при бесполезной попытке/уловке шаблонов, чтобы получить кодировку UTF-8. :) –

-2

Быстрый просмотр здесь: http://www.utf8-chartable.de/ (и мы должны знать, что без поиска людей) показывает, что @ действительно является символом utf8. Итак, не знаю, какие рамки жалуются на то, что это не так, но это неправильно.

+0

Это @ должно быть ® , однако он по-прежнему доступен для UTF-8 (зарегистрированный знак, я думаю) – Sh4d0wsPlyr

+1

UTF-8 является * кодировкой *. Да, он может кодировать символ ®, но не имеет никакого отношения к тому, использует ли конкретная последовательность байтовых последовательностей тот символ, который использует UTF-8, в отличие от любой из нескольких альтернатив. –

1

В очень общем смысле кодирование - это просто ассортимент и распределение бит, которое используется для представления строк. См. Приведенную ниже ссылку для получения более подробной информации. Как правило, все типы кодирования достаточно переносятся друг к другу, но есть несколько исключений из этого. Вероятно, вы видели большие пустые квадраты/и т. Д., Которые отмечают символ, который не может быть отображен. Обычно это вызвано ошибкой кодирования (такой как символ, не существующий для этой схемы кодирования).

https://en.wikipedia.org/wiki/UTF-8

В соответствии с вашей конкретной проблемы, что строка в списке должна быть UTF-8 кодируемый. Возможно, он был сохранен в другом типе кодирования (что может вызвать проблему). Вы всегда можете попытаться преобразовать его в UTF-8 и посмотреть, что произойдет.

Редактировать - Что касается замечаний, я ожидаю, что проблема связана с не кодирующим его должным образом, прежде чем передать его через службу (или службу).

+0

Все, что вы говорите, правда, но это, похоже, не очень хорошо отвечает на вопрос. –

2

«Universal®» с ® U + 00AE не может быть представлен в виде простого 7-битного ASCII, хотя он может использоваться в нескольких других кодировках/кодировках. Универсальная кодировка Unicode UTF-8 может смешивать любой скрипт.

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

В java String является Unicode внутренне и может иметь дело со всем.

Поскольку исходное кодирование java является бесплатным, оно должно быть тем же самым кодированием, что и java-компилятор java.Однако вы можете использовать u-экранирование, используя ASCII для представления специальных символов (в диапазоне UTF-16):

String s = "Universal\u00AE"; 
byte[] bytes = s.getBytes(StandardCharsets.UTF_8); 
String t = new String(bytes, StandardCharsets.UTF_8); 
assert t.equals(s); 
Смежные вопросы