如何将NSData原始字节直接编码为UTF-16(Unicode)?

时间:2012-09-30 14:14:39

标签: objective-c ios encoding nsdata

环境: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功能无法始终工作。

我不知道这个麻烦...... :(

有人遇到类似的问题,请给我一些指示,任何答复都将非常感谢,谢谢。

真诚地祝福您和您的家人幸福和健康。

0 个答案:

没有答案