в разработке приложений для iOS мне нужно отобразить некоторые японские символы, это 2 байта, но я не могу найти правильную кодировку для использования - PullRequest
0 голосов
/ 07 марта 2011

Я занимаюсь разработкой приложения для iOS и столкнулся с проблемой кодировки на японском языке.

Поток символов японского языка отправляется в приложение с удаленного сервера, и каждый символ имеет два байта (включая хирагану, катакана), и кандзи).

Вот код:

uint8_t bytes[2];

bytes[0] = firstByte;    // First byte of the Japanese character    
bytes[1] = secondByte;   // second byte,   

NSMutableData* data =   [[NSMutableData alloc] init];
[data appendBytes:bytes length:2];

UInt32 encoding = CFStringConvertEncodingToNSStringEncoding(someJapaneseEncoding);  // need to find a correct encoding to use 
NSString* str = [[NSString alloc] initWithData:data encoding:encoding];

Затем код выведет * str на экран и будет рисовать на телефоне, но проблема в том, что, неважнокакую кодировку я использую, str не может отображаться правильно.они становятся тарабарщиной, или пробелом, или каким-либо другим языком, таким как корейские или тайские символы, но они никогда не отображаются на японском языке.

Кодировка, которую я пробовал, (и более того, я пробовал множество кодировок):

  • NSASCIIStringEncoding 7 ビ ッ ト ASCII エ ン ー 101
  • NSNEXTSTEPString ー ring II II cSC NeXT
  • NSJapaneseEUCStringEncoding 日本語 EUC
  • NSUTF8StringEncoding 8 ビ ッ ト Юникода (UTF-8) エ ン コ ー ド
  • NSISOLatin1StringEncoding ИСО ラ テ ン 1 エ ン コ ー ド * тысяча двадцать-один * * одна тысяча двадцать-два * NSISOLatin2StringEncoding ISO ラ テ ン 2 エ ン コ ー ド
  • NSSymbolStringEncoding シ ン ボ ル エ ン コ ー ド
  • NSNonLossyASCIIStringEncoding 損失 無 し 7 ビ ッ ト ASCII-エ ン コ ー ド * тысяча двадцать-семь *
  • NSShiftJISStringEncoding シ フ ト JIS
  • NSUnicodeStringEncoding Юникода エ ン コ ー ド
  • NSWindowsCP1251StringEncoding ア ド ビ ス タ ン ダ ー ド кириллицы
  • NSWindowsCP1252StringEncoding Win ラ テ ン 1
  • NSWindowsCP1253StringEncoding Greek
  • NSWindowsCP1254StringEncoding Turkish
  • NSWindowsCP1250StringEncoding Win ラ テ ン 1
  • NSISO2022JPStringEncoding ISO2022日本語エンコード (電子 メ ー ル な ど)
  • NSMacOSRomanStringEncoding MacRoman
  • * * *1046* * * * * * * * * * * * * *Я искал онлайн несколько дней, но не повезло ... пожалуйста, помогите ...

1 Ответ

1 голос
/ 07 марта 2011

Это все NSStringEncodings, поэтому ваш код неверен.Вы хотите, например:

uint8_t bytes[2];

bytes[0] = firstByte;    // First byte of the Japanese character    
bytes[1] = secondByte;   // second byte,   

NSMutableData* data =   [[NSMutableData alloc] init];
[data appendBytes:bytes length:2];

NSString* str = [[NSString alloc] initWithData:data 
                                           encoding:NSUTF16StringEncoding];

т.е. без вызова CFStringConvertEncodingToNSStringEncoding, поскольку вы не начинаете с CFStringEncoding.

На практике, если iPhone поддерживает вашу загадочную кодировку Iя ожидал, что это будет NSUTF16StringEncoding или явно NSUTF16BigEndianStringEncoding или NSUTF16LittleEndianStringEncoding, так как они являются единственными двухбайтовыми типами.

Поскольку вы загружаете два байта 16-битного количества в память в фиксированном порядке, ваш код на самом деле не является порядком байтов.Так что следите за этим.

...