2016-06-21 2 views
0

Я пытаюсь найти способ получить значения, фактически введенные в переменную, чтобы я мог печатать их в файле. Проблема заключается в том, что сканер не распознает чешские буквы, такие как «ř, а, ž, š» и т.д. Вот пример кода:Ввод сканирования с UTF-8

String jmeno; 
Scanner input= new Scanner(System.in, "utf-8"); 
jmeno = input.next(); 

Что я типа:

Šárka 

Что хранится в переменной jméno:

??rka 

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

Также компьютер, который я использую, имеет системное кодирование EN (US).

+0

пробные крышки UTF-8? – mattymanme

+1

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

+4

Я уверен ** ** это мусор? У некоторых шрифтов просто нет кодовых точек, которые будут отображаться персонажем, заменяя таким образом «?». – Fildor

ответ

1

Использование new Scanner(System.in). Это использует кодировку операционной системы по умолчанию, такую ​​же, как в System.in. String (как всегда) содержит версию Unicode, который затем может записать в файл, используя

new OutputStreamWriter(new FileOutputStream(...), "UTF-8") 

или другие (более простые) методы.

+0

Возможно, это проблема. Я использую английский (США), но хочу, чтобы моя программа также распознавала чешские буквы. Это проблема? Программа будет использоваться только на чешских компьютерах. Таким образом, системная кодировка по умолчанию всегда будет чешской. – Lance

+1

System.in - это родная, поэтому проблема. Теперь консоль IDE может быть чем-то другим. Лучше всего было бы использовать _not_ для использования System.В Windows у вас может быть успех с ** «Windows-1252» ** - MSWindows Latin-1 - вместо «ISO-8859-1» - официальный латинский-1. –

+0

Как быстро проверить, может ли код работать на ПК в Чешском регионе? – Lance

-1

Я хотел бы предложить вам попробовать

Scanner input= new Scanner(System.in, "ISO-8859-1"); 

EDIT: Как вы сказали некоторые символы до сих пор не работает пытаясь рассмотреть:

Scanner input= new Scanner(System.in, "ISO-8859-2"); 

"ISO-8859-2" suprorts Чехия Check this for more information

+0

Почему ты предлагаешь это? Заголовок вопроса, похоже, подразумевает, что вход UTF-8. – Thilo

+0

Почти. Однако он не сохраняет «ř» в переменной. поэтому Входные данные Выходные данные – Lance

+0

Czech is latin2 AFAIK. – meskobalazs

0

Это должен быть комментарий, но, к сожалению, у меня пока нет этой привилегии. При отладке (путем вывода некоторого текста в файл, браузер или просто просмотра их в среде IDE) не спешите говорить «он не работает, потому что я получаю здесь символы». Возможно, только ваша IDE/система не может отображать эти символы utf-8. Чтобы быть действительно уверенным, вы можете скопировать выделенный текст из файла/браузера/отладчика, а затем вставить его в Notepad ++ (или какой-нибудь другой редактор с шестнадцатеричным редактором), а затем использовать view in hex, если вы видите 0xefbfbd (utf-8's "can ' t декодировать этот «код»), тогда он сломан. В противном случае все в порядке.

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