我有一个iPad应用程序,用户在文本字段中输入电话号码。有时电话号码以UTF-16输入(日语有时以这种方式输入电话号码),但大部分时间都是UTF-8。
我的问题分为三部分:
答案 0 :(得分:2)
我可以告诉你这个号码是UTF-8还是UTF-16?
没有。 NSString
未公开此实现细节。你不应该需要它。 (如果你这样做,那很可能是设计错误。)
如果数字是数字?如何从UTF-16转换为UTF-8?
(数字是数字,还是我错过了什么?)嗯,您可以使用NSString
作为一种“桥梁”来转换不同的C字符串(字符数组)编码:
unichar utf16_string[] = // some UTF-16 C string
NSString *tmp = [[NSString alloc] initWithBytes:utf16_string
length:sizeof(utf16_string) / sizeof(utf16_string[0])
encoding:NSUTF16StringEncoding
];
const char *utf8_string = [tmp UTF8String];
看了之后什么都没找到,有人知道关于这个问题的好论文吗?
答案 1 :(得分:1)
所有Unicode编码都可以毫无问题地进行转换。 UTF-8只是与UTF-16相同的另一种编码。东亚用户使用UTF-16比UTF-8更常用的主要原因是,用UTF-16编码东亚Unicode平面的代码点的空间效率更高。
Unicode编码之间的转换或多或少是直接的:Unicode为每个字符分配一个代码点。代码点以特定于编码的方式编码为字节流。因此,您必须做的是将UTF-16字节流解码为单个Unicode码点,然后将它们反转换为UTF-8编码的字节流。
我可以告诉你这个号码是UTF-8还是UTF-16?
这不是你想要的。您想知道字符串的编码。
如何从UTF-16转换为UTF-8