2010-04-20 5 views
1

Я использую java io для извлечения текста с сервера, который может выводить символ, например, é. , то вывести его с помощью System.err, они окажутся «?». Я использую кодировку UTF8. что не так? int len ​​= 0;чтение unicode

char[] buffer = new char[1024]; 
OutputStream os = sock.getOutputStream(); 
InputStream is = sock.getInputStream(); 
os.write(query.getBytes("UTF8"));//iso8859_1")); 

Reader reader = new InputStreamReader(is, Charset.forName("UTF-8")); 
do { 
    len = reader.read(buffer); 
    if (len > 0) { 
     if (outstring == null) { 
      outstring = new StringBuffer(); 
     } 
     outstring.append(buffer, 0, len); 
    } 
} while (len > 0); 
System.err.println(outstring); 

Edit: просто попытался следующий код:

StringBuffer b = new StringBuffer(); 
for (char c = 'a'; c < 'd'; c++) { 
    b.append(c); 
} 
b.append('\u00a5'); // Japanese Yen symbol 
b.append('\u01FC'); // Roman AE with acute accent 
b.append('\u0391'); // GREEK Capital Alpha 
b.append('\u03A9'); // GREEK Capital Omega 

for (int i = 0; i < b.length(); i++) { 
    System.out.println("Character #" + i + " is " + b.charAt(i)); 
} 
System.out.println("Accumulated characters are " + b); 

вышел быть нежелательной, а также:

 
Character #0 is a 
Character #1 is b 
Character #2 is c 
Character #3 is ¥ 
Character #4 is ? 
Character #5 is ? 
Character #6 is ? 
Accumulated characters are abc¥??? 
+0

переформатирован код; пожалуйста, верните, если это неверно. – trashgod

+0

Хотя это не связано с проблемой, в этом использовании предпочтение отдается «StringBuilder». – trashgod

ответ

0

написать это в файл и проверить, как он приходит. если он поступает правильно в файл, то это проблема с вашим потоком ошибок (кодирование не UTF-8). если он также появляется в качестве символа нежелательной почты в кодировке ur-сервера, возможно, не UTF-8.

+0

Файл вышел так же, но другая справочная программа читает и отображает символ Юникода просто отлично (у меня нет исходного кода для этой программы) – user121196

+0

Я изменил кодировку на UTF-8 в eclipse и запустил недавно добавленный код придет должным образом ... просьба проверить так. – sreejith

2

Прежде всего, убедитесь, что системное свойство (file.encoding) является, по сути, UTF8. Если это ваша проблема, это не тот код, который вы используете, но ваша программа терминала (или другой вывод) не может правильно отобразить вывод.

0

Ваш второй пример производит для меня следующий результат.

Character #0 is a 
Character #1 is b 
Character #2 is c 
Character #3 is ¥ 
Character #4 is Ǽ 
Character #5 is Α 
Character #6 is Ω 
Accumulated characters are abc¥ǼΑΩ 

Этот код создает правильно кодированный файл UTF-8, имеющий одинаковый контент.

StringBuilder b = new StringBuilder(); 
for (char c = 'a'; c < 'd'; c++) { 
    b.append(c); 
} 
b.append('\u00a5'); // Japanese Yen symbol 
b.append('\u01FC'); // Roman AE with acute accent 
b.append('\u0391'); // GREEK Capital Alpha 
b.append('\u03A9'); // GREEK Capital Omega 

PrintStream out = new PrintStream("temp.txt", "UTF-8"); 
for (int i = 0; i < b.length(); i++) { 
    out.println("Character #" + i + " is " + b.charAt(i)); 
} 
out.println("Accumulated characters are " + b); 

Смотрите также: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

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