环境: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功能无法始终工作。
我不知道这个麻烦...... :(
有人遇到类似的问题,请给我一些指示,任何答复都将非常感谢,谢谢。
真诚地祝福您和您的家人幸福和健康。