2011-03-07 34 views
0

我正在開發一個iOS應用程序,我遇到了日文編碼問題。在iOS應用程序開發中,我需要顯示一些日文字符,它是2個字節,但我找不到正確的編碼使用

日語字符流從遠程服務器發送到應用程序,每個字符有兩個字節(包括平假名,片假名和漢字)。

下面的代碼:

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能」不能正確顯示。它們會變成亂碼,空間或其他語言,如韓文或泰文字符,但它們永遠不會以日文顯示。

我已經嘗試的編碼是(多,我試圖大量編碼的):

  • NSASCIIStringEncoding 7ビットASCIIエンコード
  • NSNEXTSTEPStringEncoding NeXTSTEP的拡張8ビットASCIIエンコード
  • NSJapaneseEUCStringEncoding日本語EUC
  • NSUTF8StringEncoding 8使用Unicode(UTF8)日期代碼
  • NSISOLatin1StringEncoding ISOラテン1エンコー
  • NSISOLatin2StringEncoding ISOラテン2エンコード
  • NSSymbolStringEncodingシンボルエンコード
  • NSNonLossyASCIIStringEncoding損失無し7ビットASCIIエンコード
  • NSShiftJISStringEncodingシフトJIS
  • NSUnicodeStringEncoding的Unicodeエンコード
  • NSWindowsCP1251StringEncodingアドビスタンダード西里爾
  • NSWindowsCP1252StringEncoding贏ラテン1
  • NSWindowsCP1253StringEncoding希臘
  • NSWindowsCP1254StringEncoding土耳其
  • NSWindowsCP1250StringEncoding贏ラテン1
  • NSISO2022JPStringEncodingISO2022日本語エンコード(電子メールなど)
  • NSMacOSRomanStringEncoding的MacRoman
  • NSProprietaryStringEncoding

我真的需要幫助的這個,我在網上搜索了幾天但沒有l烏克...請幫助...

+0

您需要找出另一端的編碼名稱。有很多可能性。 – bmargulies 2011-03-07 01:35:34

+0

這也是另一個問題....我不知道他們在服務器端使用什麼編碼......只知道它有2個字符..它可能是一臺Linux機器......任何可能性?非常感謝 – chingju 2011-03-07 01:40:29

回答

1

這些都是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支持你的神祕編碼,我期望它是NSUTF16StringEncoding,或者明確NSUTF16BigEndianStringEncoding或NSUTF16LittleEndianStringEncoding,因爲它們是唯一的雙字節類型。

因爲您正在以固定順序將16位數量的兩個字節加載到內存中,所以您的代碼實際上並不是endian中性。所以注意這一點。

+2

它也可能是ShiftJIS('NSShiftJISStringEncoding') – Dre 2011-03-07 02:28:18

+0

嗨,非常感謝您的回答,@湯米,我正在嘗試它,雖然沒有運氣,但我認爲它越來越近了。關於endian問題,如果我交換兩個字節,它會有幫助嗎?或者我應該交換每一位的位置?我不知道它實際上是哪個endian。 – chingju 2011-03-07 04:07:14

+0

@chingju你會交換字節。 – Dre 2011-03-07 08:37:18

相關問題