Ios 是否将UTF-16数字转换为UTF-8?

Ios 是否将UTF-16数字转换为UTF-8?,ios,objective-c,utf-8,utf-16,Ios,Objective C,Utf 8,Utf 16,我有一个iPad应用程序,用户可以在文本字段中输入电话号码。有时电话号码是用UTF-16输入的(日本人有时用这种方式输入电话号码),但大多数情况下是用UTF-8输入的 我的问题分为三个部分: 有没有办法知道号码是UTF-8还是UTF-16 如果数字是数字,如何从UTF-16转换为UTF-8 在没有发现任何东西的情况下,有人知道这方面的一篇好论文吗?(在iOS中来回转换) 所有Unicode编码都可以毫无问题地在两者之间转换。UTF-8只是UTF-16的另一种编码。东亚用户比UTF-8更频繁地使

我有一个iPad应用程序,用户可以在文本字段中输入电话号码。有时电话号码是用UTF-16输入的(日本人有时用这种方式输入电话号码),但大多数情况下是用UTF-8输入的

我的问题分为三个部分:

  • 有没有办法知道号码是UTF-8还是UTF-16
  • 如果数字是数字,如何从UTF-16转换为UTF-8
  • 在没有发现任何东西的情况下,有人知道这方面的一篇好论文吗?(在iOS中来回转换)

所有Unicode编码都可以毫无问题地在两者之间转换。UTF-8只是UTF-16的另一种编码。东亚用户比UTF-8更频繁地使用UTF-16的主要原因是,在UTF-16中编码东亚Unicode平面的代码点更节省空间

Unicode编码之间的转换或多或少是简单的:Unicode为每个字符分配一个代码点。代码点以特定于编码的方式编码到ByTestStream中。因此,您必须将UTF-16 ByTestStream解码为单个Unicode代码点,然后将其反转换为UTF-8 ByTestStream编码

有没有办法知道号码是UTF-8还是UTF-16

那不是你想要的。您想知道字符串的编码

如何从UTF-16转换为UTF-8

最好使用经过测试的Unicode库,如。也可能对您有用,但请注意许可证

有没有办法知道号码是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];
在没有发现任何东西的情况下,有人知道这方面的一篇好论文吗


如果用户在
UITextField
中输入数字,则您有一个
NSString
。用户如何以不同的编码输入此字符串?那没有任何意义。您可以使用所需的任何编码将
NSString
转换为
NSData
,但用户在输入文本字段期间无法控制编码。您所说的“在UTF-16或UTF-8中输入数字”是什么意思?@MartinR:TestStreams编码的UTF-16每个码点至少使用2个字节,然而UTF-8可以低至每个代码点一个字节。@DatenWalf:我知道UTF-8和UTF-16,但我不知道这如何适用于使用
NSString
(rmaddy在他的评论中也提到了这一点)。我理解其中的区别。。。我刚从为应用程序提供规范的人那里得知这一点……我相信,
libiconv
默认安装在iOS上,至少在工具链的sysroot中有一个iconv.dylib文件。另外,正如我所描述的,
NSString
本身不能处理转换吗?