Подтвердить что ты не робот

Печатать строку литерала unicode как фактический символ

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

"\ u00a5123"

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

Тем не менее, я хочу напечатать это, если преобразовать unicode в символ фактической йены (символ\u00a5 → yen) - как бы я это сделал?

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

4b9b3361

Ответ 1

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

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

Выход:

¥ 123

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

изменить:

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

Я не знаю какой-либо конкретной системы для синтаксического анализа строки, как если бы это была закодированная строка Java.

Ответ 2

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

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

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

    String hex = "63A5";
    int intValue = Integer.parseInt(hex, 16);
    System.out.println((char)intValue);
    

Ответ 3

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

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

Ответ 4

Не удалось заменить выше:

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);
    }
}