Вывести строковый литерал в кодировке Unicode как фактический символ - PullRequest
16 голосов
/ 10 сентября 2009

В моем Java-приложении мне передали строку, которая выглядит следующим образом:

"\ u00a5123"

При печати этой строки в консоли я получаю ту же строку, что и вывод (как и ожидалось).

Однако я хочу напечатать это, преобразовав юникод в реальный символ иены (\ u00a5 -> символ иены) - как мне поступить?

т.е. так это выглядит так: "[символ иены] 123"

Ответы [ 4 ]

16 голосов
/ 10 сентября 2009

Я написал небольшую программу:

public static void main(String[] args) {
    System.out.println("\u00a5123");
}

Вывод:

¥ 123

т.е. он выводит именно то, что вы заявили в своем посте. Я не уверен, что больше ничего не происходит. Какую версию Java вы используете?

редактирование:

В ответ на ваше разъяснение есть пара различных техник. Самый простой способ - найти «\ u», за которым следуют 4 символа шестнадцатеричного кода, извлечь этот фрагмент и заменить его версией с кодировкой Юникод на шестнадцатеричный код (используя класс Character). Это, конечно, предполагает, что перед строкой не будет \ u.

Мне неизвестна какая-либо конкретная система для анализа строки, как если бы она была закодированной строкой Java.

2 голосов
/ 06 ноября 2009

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

  1. Токенизируйте строку, используя \ u в качестве разделителя. Например: \u63A5\u53D7 => { "63A5", "53D7" }

  2. Обработайте эти строки следующим образом:

    String hex = "63A5";
    int intValue = Integer.parseInt(hex, 16);
    System.out.println((char)intValue);
    
1 голос
/ 17 января 2013

Можно заменить вышеперечисленное следующим:

System.out.println((char)0x63A5);

Вот код для печати всех символов Юникода, создающих коробки.

public static void printBox()
{
    for (int i=0x2500;i<=0x257F;i++)
    {
        System.out.printf("0x%x : %c\n",i,(char)i);
    }
}
1 голос
/ 10 сентября 2009

Вам, вероятно, придется написать анализ, если только вы не найдете его в сторонней библиотеке. В JDK нет ничего, что можно было бы проанализировать для вас, я знаю, потому что у меня совсем недавно возникла идея использовать такие виды экранирования как способ переправить юникод через базу данных только для Latin-1. (В итоге я сделал что-то еще)

Я скажу вам, что java.util.Properties экранирует и удаляет символы Unicode таким образом при чтении и записи файлов (так как файлы должны быть ASCII). Методы, которые он использует для этого, являются закрытыми, поэтому их нельзя вызывать, но вы можете использовать исходный код JDK, чтобы вдохновить ваше решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...