-1

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

我的问题分为三部分:

  • 有什么方法可以判断数字是 UTF-8 还是 UTF-16?
  • 鉴于数字是数字,如何从 UTF-16 转换为 UTF-8?
  • 看了一无所获,有人知道关于这个主题的好论文吗?(在 iOS 中来回转换)。
4

2 回答 2

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];

看了一无所获,有人知道关于这个主题的好论文吗?

NSString 类参考

于 2013-04-30T17:47:08.277 回答
1

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

Unicode 编码之间的转换或多或少是直截了当的:Unicode 为每个字符分配一个代码点。代码点以特定编码方式编码为字节流。因此,您必须做的是将 UTF-16 字节流解码为单个 Unicode 代码点,然后将它们反向转换为 UTF-8 编码的字节流。

有什么方法可以判断数字是 UTF-8 还是 UTF-16?

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

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

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

于 2013-04-30T17:45:32.097 回答