Избегайте печати символа замены юникода в Java - PullRequest
0 голосов
/ 02 декабря 2009

Почему в Java Character.toString((char) 65533) распечатывает этот символ: ?

У меня есть программа на Java, которая печатает эти символы повсюду. Это большая программа. Любые идеи о том, что я могу сделать, чтобы избежать этого?

Ответы [ 5 ]

10 голосов
/ 02 декабря 2009

Одним из наиболее вероятных сценариев является попытка чтения данных ISO-8859 с использованием набора символов UTF-8. Если вы встретите последовательность символов, которая не является допустимой UTF-8, то она будет заменена символом..

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

8 голосов
/ 02 декабря 2009

Почему в java Character.toString ((char) 65533) печатает этот символ: ?

Поскольку именно этот конкретный символ IS связан с конкретным кодом . не отображает случайный символ, как вы думаете.

У меня есть Java-программа, которая печатает эти символы повсюду. Это большая программа. Любые идеи о том, что я могу сделать, чтобы избежать этого?

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

Меня привлекает тот факт, что Java не делает абсолютно ничего особенного с 0xFFFD, она просто заменяет непокрытые символы на вопросительный знак ? и что вы продолжаете настаивать, что 0xFFFD происходит из Java. Я знаю, что Firefox делает именно то, что вы сказали, так что вы, возможно, путаете «Firefox» с «Java»?

Если это так, и вы на самом деле говорите о веб-приложении Java, то вам нужно установить как минимум кодировку ответа HTTP на UTF-8. Вы можете сделать это, поместив <%@ page pageEncoding="UTF-8" %> в верхней части страницы JSP, о которой идет речь. эта статья может оказаться полезной для получения дополнительной справочной информации и подробного обзора всех шагов и решений, которые необходимо применить для решения этой "проблемы Unicode".

2 голосов
/ 02 декабря 2009

Нет символа Unicode U + FFFD. Следовательно, код является логически неверным. Предполагаемое использование символа замены Unicode должно заменить неправильный ввод (например, (char)65533)

Как это исправить: не кладите мусор в строки. Строки для текста. Байты для случайных двоичных данных.

1 голос
/ 03 декабря 2009
1 голос
/ 02 декабря 2009

Ну, а что ты хочешь сделать? Если вы получаете эти символы «повсюду», я подозреваю, что у вас неверные данные ... очень редко вы получаете данные, которые не могут быть представлены в Unicode.

Как вы получаете данные для начала?

...