1

环境:iOS Xcode Objective-C 乱码 Unicode UTF-16

我的问题:

我从远程文件中获取文件内容,然后将其存储到 NSData 对象中,然后我想将 NSData 转换为 Unicode 编码(注意:不是 UTF-8,UTF-16 可以),问题是我不知道原始文件内容编码,如何将未知的原始字节转换为 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