1

環境: iOS Xcode Objective-C 文字化け Unicode UTF-16

私の質問:

リモートファイルからファイルコンテンツを取得し、それを NSData オブジェクトに保存した後、NSData を Unicode エンコーディングに変換したい (注: UTF-8 ではなく、UTF-16 は問題ありません)、問題は私が知らないことです元のファイル コンテンツ エンコーディング、未知の raw バイトを Unicode (UTF-16) に変換するにはどうすればよいですか?

私は非常に多くの方法を試しましたが、誰も私のターゲットであるコードにうまく触れませんでした:

NSData *chunk = [NSData dataWithContentsOfURL:url];
NSString* newStr = [[[NSString alloc] initWithData:chunk encoding:NSUTF16LittleEndianStringEncoding]  autorelease];
NSData* d = [newStr dataUsingEncoding:NSUnicodeStringEncoding];
[d writeToFile:newFilePath atomically:YES];

ファイルを NSData に取得し、Unicode にエンコードしてファイルに書き込みます。

NSString*  converted_str = [[NSString alloc] initWithData:chunk encoding:NSUTF8StringEncoding];
NSData * d = [(id)CFStringCreateExternalRepresentation(NULL, (CFStringRef)converted_str, kCFStringEncodingUnicode, 0) autorelease];
[d writeToFile:newFilePath atomically:YES];

NSData を NSString に変換してから、それを NSData に復元してファイルに書き込みますが、機能しません。

[converted_str writeToFile:newFilePath atomically:YES encoding:NSUnicodeStringEncoding error:&error];

NSString オブジェクトを使用してファイルに直接書き込むと、文字化けします。

CFStringRef converted_str = CFStringCreateWithBytes(NULL, [chunk  bytes],[chunk length], kCFStringEncodingUTF8,false);  
CFStringRef newStr = [chunk dataUsingEncoding:NSUTF8StringEncoding];
NSData * d = [(id)CFStringCreateExternalRepresentation(NULL, (CFStringRef)big5Str, NSUnicodeStringEncoding, 0) autorelease];
[d writeToFile:newFilePath atomically:YES];

cString を使用してエンコーディング作業を行いますが、失敗もします。

char converted[([chunk length] + 1)];
[chunk getCString:converted maxLength:([chunk length] + 1) encoding: NSWindowsCP1251StringEncoding];
NSLog(@"converted:%s", converted);
NSString *converted_str = [NSString stringWithCString:converted encoding:NSUnicodeStringEncoding];
NSLog(@"converted_str:%@", converted_str);

また、 usedEncoding:&xxx を使用して元のファイル エンコーディングを取得し、返されたエンコーディングを使用して文字列オブジェクトにデコードしようとしましたが、再び失敗しました。

NSStringEncoding encoding;
NSString *chunk = [[NSString alloc] initWithContentsOfURL:[rb fileURL] usedEncoding:&encoding error:&error];
...

次に、kCFStringEncodingUTF16 を使用して Unicode でエンコードされたバッファを取得しようとしましたが、失敗しました。

NSStringEncoding encode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF16);
NSString *chunk = [NSString stringWithContentsOfURL:url encoding:encode error:&error];

結局、iOS(iPhone,iPad)用のlibiconvを試してみたいのですが、ソースコンテンツのエンコーディングが不明で、usedEncoding:&xxx関数が常に動作するとは限らないのが難点です。

私はこのトラブルの見当がつかない... :(

似たような質問に答えてくれる人はいますか? 方向性を教えてください。どんな回答でも大歓迎です。

あなたとご家族の幸せと健康を心よりお祈り申し上げます。

4

0 に答える 0