我有一个 iPad 应用程序,用户在文本字段中输入电话号码。有时电话号码以 UTF-16 输入(日本人有时以这种方式输入他们的电话号码),但大多数时候以 UTF-8 输入。
我的问题分为三部分:
- 有什么方法可以判断数字是 UTF-8 还是 UTF-16?
- 鉴于数字是数字,如何从 UTF-16 转换为 UTF-8?
- 看了一无所获,有人知道关于这个主题的好论文吗?(在 iOS 中来回转换)。
我有一个 iPad 应用程序,用户在文本字段中输入电话号码。有时电话号码以 UTF-16 输入(日本人有时以这种方式输入他们的电话号码),但大多数时候以 UTF-8 输入。
我的问题分为三部分:
有什么方法可以判断数字是 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];
看了一无所获,有人知道关于这个主题的好论文吗?
所有 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