У меня есть строка Java, которая содержит символ Unicode U + 9996 (это то, что я получаю, если я делаю codePointAt ()).
Если я посмотрю на панель выражений отладчика (в eclipse), то все будет хорошо, и это выглядит как " 首 ". Однако, если я распечатываю это на консоль, я получаю просто "? ". Кажется, проблема не в шрифте, потому что я пытался установить его по-другому.
Моя настоящая проблема в том, что я пытаюсь поместить строку в базу данных MySQL (с кодировкой utf8). Многие другие широкие символы хорошо отображаются в БД, но, опять же, этот и некоторые другие, как он, отображаются как «?». Все это заставляет меня поверить, что проблема на стороне Java.
В погоне за этой ошибкой я немного узнал о Нормализации Unicode и java.text. Нормализатор , который выглядит так, как будто это может быть уместно в этом случае. Я узнал, что U + 9996 - это каноническая версия U + 2FB8. U + 2FB8 имеет точно такие же проблемы, что и выше, хотя в отношении отображения, и в любом случае, почему я хотел бы преобразовать в неканоническое представление (даже если бы я мог, что я не думаю, что смогу)?
В любом случае, я нашел одну потенциальную подсказку, которую я не смог понять. Эта страница содержит слова "U + 9996 не является допустимым символом Unicode" без дальнейшего объяснения. Затем он продолжает показывать, как кодировать этот предположительно недопустимый символ Unicode в различных кодировках Unicode. Так что мой вопрос в основном это: WTF?
ОБНОВЛЕНИЕ
- Я на Mac.
- Я говорю о консоли Eclipse.
- Я установил кодировку консоли на UTF-8 в разделе «Выполнить»> «Общий»
- Я добавил
-Dfile.encoding=UTF-8
к аргументам JVM (по умолчанию был MacRoman)
- Консоль (Eclipse и Terminal.app) теперь показывает правильные символы. Ура!
- Меня больше всего интересует правильное поступление данных в базу данных, хотя, конечно, я бы хотел получить полное представление о том, что здесь происходит.
- Мне кажется, я исправил проблему с базой данных. Я забыл установить кодировку для соединения . Теперь я не понимаю, почему некоторые азиатские персонажи проходили, а другие нет.
- Фу, стекопоток движется быстро. Сложно не отставать. Спасибо людям.