Что такое соответствующая кодировка текста? - PullRequest
0 голосов
/ 24 февраля 2011

Связь между моим клиентом и сервером была в формате XML в UTF-8.Однако недавно я обнаружил в базе данных символ, отличный от UTF-8 - во всей базе данных есть только один.И, очевидно, это нужно сохранить.

Но я не хочу менять все сообщения между клиентом и сервером на UTF-16, так как все они внезапно удвоятся по размеру только для одного случайного символа юникода.

Можно ли использовать более эффективную кодировку текста?Возможно, тот, который по-прежнему будет передавать большинство символов ASCII в виде 8 битов, но все же будет разрешать отправку символов, отличных от UTF-8?

Ответы [ 5 ]

3 голосов
/ 24 февраля 2011

Есть ли более эффективный кодировка текста я мог бы использовать? Возможно один который будет передавать большинство ASCII символы еще как 8-битные?

Это точно что такое utf-8.

3 голосов
/ 24 февраля 2011

Не путайте UTF-8 и ASCII. UTF-8 - это кодировка Unicode. Если вы действительно поддерживаете UTF-8, то этот символ Unicode не вызовет проблем.

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

1 голос
/ 24 февраля 2011

Я думаю, вы должны попытаться понять, почему «этот персонаж должен быть сохранен».

Какая кодировка вашей базы данных? если это UTF-8, то, вероятно, он содержит только символы UTF-8.

Храните ли вы двоичные представления символов UTF-8 в кодировке от <> до utf-8?

Вам следует придерживаться utf-8 и лучше понимать цепочку кодирования.

0 голосов
/ 25 февраля 2011

Нет такого понятия, как не-UTF-8 символ.UTF-8 может кодировать каждый существующий символ, то есть каждый символ в Unicode.Правда, существуют последовательности октетов, которые не являются кодировками UTF-8 какого-либо символа;но это совсем другое.Я подозреваю, что вы получили сообщение об ошибке, в котором говорится, что входящий поток октетов не может быть декодирован как UTF-8.Это происходит, когда отправитель кодирует данные в iso-8859-1, а получатель ожидает, что они будут закодированы в UTF-8.

0 голосов
/ 24 февраля 2011

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

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

...