我想知道如何转换
NSString = "\xC4"; ....
以正常格式表示的真实NSString
答案 0 :(得分:1)
与xcode UTF-8 literals基本相关。当然,你真正的意思是" \ xC4" - 如果没有指定编码,则没有任何意义。
如果您指的是Unicode代码点为0x00C4的字符,那么我会认为(虽然我没有经过测试)这可以达到您想要的效果。
NSString * s = @" \ u00C4&#34 ;;
答案 1 :(得分:0)
首先,您确定字符串中有\xC4
吗?考虑:
NSString *one = @"\xC4\x80";
NSString *two = @"\\xC4\\x80";
NSLog(@"%@ | %@", one, two);
这将输出:
Ā | \xC4\x80
如果您确定您的字符串包含四个字符\xC4
,您确定它是UTF-8编码为ASCII吗?上面你会看到我添加\x80
,这是因为\xC4
无效UTF-8,它是双字节序列的第一个字节。也许您只显示了输入的样本,并且第二个字节存在,如果不是,您没有UTF-8编码为ASCII。
如果您确定它是UTF-8编码为ASCII,您必须自己转换它。似乎Cocoa字符串编码方法可以处理它,特别是你看起来像是一个字符串,因为它可能用Objective-C源代码编写。不幸的是,明显的编码NSNonLossyAsciiStringEncoding
只处理八进制和unicode转义,而不是字符串中的十六进制转义。
您可以使用任何您喜欢的算法进行转换。一种选择是简单的有限状态机,它一次扫描输入一个字节并识别四字节序列:\
,x
,hex-digit
, hex-digit
;并将两个十六进制数字组合成一个字节。 NSString
不是字节时字符串处理的最佳选择,最好转换为C字符串,例如:
// sample input, all characters should be ASCII
NSString *input = @"\\xC4\\x80";
// obtain a C string containing the ASCII characters
const char *cInput = [input cStringUsingEncoding:NSASCIIStringEncoding];
// allocate a buffer of the correct length for the result
char cOutput[strlen(c2a)+1];
// call your function to decode the hexadecimal escapes
convertAsciiEncodedUTF8(cInput, cOutput);
// create a NSString from the result
NSString *output = [NSString stringWithCString:cOutput encoding:NSUTF8StringEncoding];
您只需要为convertAsciiEncodedUTF8
编写有限状态机或其他算法。
(如果你写了一个算法并且它没有提出另一个显示你的代码的问题,那么有人可能会帮助你。但是不要指望有人为你编写它。)
HTH