我正在读取一个二进制文件,里面有一些文本字段。
原字段值为"asdf è"
(无法更改二进制文件编码)
UTF-8 编码为 "asdf\xc3\xa8"
我读的是 "asdf\xc3\x83\xc2\xa8"
所以 NSString stringWithUTF8String:
或 initWithCString
方法给我 "asdf ¨"
如何取回正确的"asdfè"
值?
谢谢
最佳答案
你从二进制文件中读取的确实是一种奇怪的“编码”。
C3 A8
是U+00C3
("Ã") 的 UTF-8 序列C2 A8
它是U+00A8
("¨") 的 UTF-8 序列- 这些Unicodes
C3 A8
的低字节是U+00E8
的UTF-8序列(“è”)
以下“技巧”使用 ISO Latin 1 编码来转换字符
U+00C3 U+00A8
到字节C3 A8
:
char *s = "\xc3\x83\xc2\xa8";
NSString *s1 = [[NSString alloc] initWithBytes:s length:strlen(s) encoding:NSUTF8StringEncoding];
NSLog(@"%@", s1); // è
NSData *d = [s1 dataUsingEncoding:NSISOLatin1StringEncoding];
NSLog(@"%@", d); // <c3a8>
NSString *s2 = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
NSLog(@"%@", s2); // è
关于objective-c - iOS NSString stringWithUTF8String/NSString initWithCString 错误utf8解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24554795/