2009-10-08 3 views
0
 
hibyte lobyte makeunicode 
250  65  57345 

Я получил этот стол, а hibyte и lobyte - это китайский символ, который может использовать кодировку big5 или GBK, hibyte - это байт в высоту, а лобит - младший байт.Может кто-нибудь поможет мне понять это? about unicode

И я думаю, что unicode может быть некоторая кодировка в юникоде, соответствующая символу big5/GBK с hibyte и lobyte.

Но после того, как я попытаюсь отобразить, они отображают разные символы, должна быть какая-то проблема, может кто-нибудь мне помочь?

+0

Что вы делаете для их отображения? – akf

+0

независимо от того, какая платформа? – MemoryLeak

ответ

0

5 секунд разворота Google http://www.chinesecomputing.com/encodings/index.html. Преобразование big5 или GBK в unicode - это только тождественное отображение. Однако я не уверен, что вы делаете с вашими байтами, как 250 * 256 + 65 = 64065, а не 57345.

+0

Да, они сами делают кодировку ... – MemoryLeak

0

57345 - это 0xE001 в шестнадцатеричном формате, который не имеет символа Юникода (см. Полный список здесь: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt)

Но если вы сделаете 250 * 256 + 65, вы получите 0xFA41, который

FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;; 

То есть, какой-то азиатский глиф. Может быть, так?

+0

Я считаю, что U + E001 находится в частной области использования. – McDowell

+0

Да, вот что я имел в виду. –

1

Я не очень понимаю, что вы хотите, но от вашего старшего байта и младшего байта, я получил его напечатать китайский иероглиф:

byte[] bytes = {(byte)250, (byte)65}; 
String str = new String(bytes, "GBK"); 
System.out.println(str); // prints: 鶤 
System.out.println((int)str.charAt(0)); // prints: 40356 

Я не знаю, откуда приходит ваш «57345» от

+1

Почему бы не байт [] bytes = {(byte) 65, (byte) 250}; ? ;) байт-порядок делает разницу! –

0

Аналогично ответ newacct, но только, чтобы показать, что он печатает этот символ для других китайских кодировок тоже:

byte[] b = new byte[] {(byte)250,(byte)65}; 
String s = new String(b,"GB18030"); 
OutputStreamWriter fos = new OutputStreamWriter(new FileOutputStream(new File("c:\\a.html")),"GB18030"); 
fos.write(s); 
fos.close(); 

распечаток

0

Диапазон первого байта (hibyte) Big5 равен 0xA1 ~ 0xF9; а GBK - 0x81 ~ 0xFE.

Очевидно, что он не закодирован с помощью Big5. Это может быть GBK/GB18030.

Но GK18030 нисходящий совместим с GBK.

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