環境: 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関数が常に動作するとは限らないのが難点です。
私はこのトラブルの見当がつかない... :(
似たような質問に答えてくれる人はいますか? 方向性を教えてください。どんな回答でも大歓迎です。
あなたとご家族の幸せと健康を心よりお祈り申し上げます。