2016-03-17 3 views
4

Итак, я работал над чем-то, что помогло мне с некоторыми математиками и отображением работы, и все работает хорошо, но для вывода на консоль мне нужно иметь возможность отображать надстрочный индекс Unicode и индекс. У меня было установить сначала с помощью следующей функции для верхнего индекса:Ошибки нескольких блоков Unicode

public static String getBase(int num){ 
    String uniStr = "\\u207"; 
    String numStr = Integer.toString(num); 
    String res = ""; 

    for(int i = 0; i < numStr.length(); i++){ 
     String s = uniStr + numStr.charAt(i); 
     char c = (char) Integer.parseInt(s.substring(2), 16); 
     res += c; 
    } 
    return res; 
} 

Это работало отлично до такой степени, но при использовании следующего вызова для отладки:

System.out.println(Unicode.getBase(1234567890)); 

Я получил выход:

ⁱ⁲⁳⁴⁵⁶⁷⁸⁹⁰ 

из-за надстрочного индекса для 1, 2 и 3, имеющих далеко друг от друга идентификаторы Unicode в блоке unicode Latin1-Supplement, в отличие от того, чтобы быть в блоке надстрочного/нижнего индекса с другими символами , Поэтому я добавил переключатель заявление в попытке справиться с этими 3 конкретно, в результате чего:

public static String getBase(int num){ 
    String uniStr = "\\u207"; 
    String numStr = Integer.toString(num); 
    String res = ""; 
    for(int i = 0; i < numStr.length(); i++){ 

     String s = ""; 
     switch(numStr.charAt(i)) 
     { 
     case '1': 
      s = "\\u00B9"; 
      break; 
     case '2': 
      s = "\\u00B2"; 
      break; 
     case '3': 
      s = "\\u00B3"; 
      break; 
     default:  
      s = uniStr + numStr.charAt(i); 
     } 

     char c = (char) Integer.parseInt(s.substring(2), 16); 
     res += c; 
    } 
    return res; 
} 

И еще теперь я получаю выход:

¹²³⁴⁵⁶⁷⁸⁹⁰ 

за исключением того факта, что только 1, 2 и -теперь будет отображаться в консоли, с 4-0 всеми имеющим инвалидом коробка характера, как:

¹²³ࢆࢆࢆࢆࢆࢆࢆ 

Я знаю, за то, что переключатель работает, как доказан на 1, 2 и 3 показывает, что все правильно, а синтаксический анализ Строка для других персонажей также работает, но это все еще происходит. Для жизни меня я не могу найти решение или даже повод для этого. Если я использую символы из одного блока Unicode, он пытается также захватить все остальные символы из этого диапазона, и если я могу что-нибудь сделать с этим? Это кажется единственной вероятной причиной, о которой я могу думать, в противном случае я здоров и по-настоящему тупик. Любая помощь будет чрезвычайно оценена.

P.S. У меня есть мои запустить конфиги в Eclipse, установлены в UTF-8 и все эти символы поддерживаются

+3

Возможный дубликат [Распечатка unicode из проблемы с кодом Java в консоли Windows] (http://stackoverflow.com/questions/20386335/printing-out-unicode-from-java-code-issue-in-windows-console) –

+3

проблема заключается в поддержке Windows Unicode, а не в Java. [Вход в Unicode в консольном приложении в Java] (http://stackoverflow.com/q/8669056/995714) –

ответ

0

Любому любопытных, «LUU Виньфук» был правильным в том, что это проблема с консолью Windows, будучи довольно ... недобрым в условия юникода. Там, безусловно, есть временные исправления, но ничего особенно приятного.

Первый Я нашел благодарность за рытье по ссылке, приведенной в его втором комментарии, и продолжая извиваться, пробираясь сквозь промежутки между ссылками. Вот в этом answer Эриксон (на основе this один за «Эдвард Греч») это объясняется тем, что вы можете установить переменную среды с именем JAVA_TOOL_OPTIONS в java -Dfile.encoding=UTF-8 … com.x.Main для того, чтобы получить консоль Eclipse, работает нормально, если вы только планирование его работы на местном уровне и не нужно строить проект для совместного использования. Не идеальный, но он работает. Однако не поддерживается, поэтому вы рискуете.

Второй немного более удобным и нашел here, ответ на «паука».Это также использует -Dfile, но в командной строке вместо того, чтобы устанавливать его как переменную среды, что означает, что вы можете создать аккуратный небольшой командный файл и использовать команду chcp 65001, чтобы установить кодовую страницу по умолчанию на консоли Windows: (Unicode).

C:\>chcp 65001 
C:\>java -jar -Dfile.encoding=UTF-8 path/to/your/runnable/jar 

вход^Console, цитата из "паука". Это, по сути, то, что вы бы изменили и добавили в run.bat, который использовался для запуска вашей jar в cmd.

Третий на this page, отправленный "Макдауэллом", в самом низу под

символов печати, как UTF-8

Этот метод включает в себя манипулирование консоль для работы в качестве дескриптора файла и имеет некоторые удобные фрагменты кода.

+0

Eclipse не нуждается в каких-либо специальных настройках для работы UTF-8. Параметр «Кодировка» в «Конфигурация запуска» определяет кодировку, которую будет обрабатывать разветвленный процесс. –

+0

'chcp 65001' - это бастардованный UTF-8 charmap. Он не поддерживает полную карту Юникода, и входной сигнал не работает –

Смежные вопросы