在 iPhone 中使用 UTF-8 编码和解码

Posted

技术标签:

【中文标题】在 iPhone 中使用 UTF-8 编码和解码【英文标题】:Encode and Decode using UTF-8 in iPhone 【发布时间】:2011-01-13 13:09:17 【问题描述】:

我正在寻找一个示例,演示如何使用 UTF-8 对相同的字符串进行编码和解码。编码然后解码意味着我想在两个区域实现方法,一个可以编码,另一个可以解码。

我已经看到了 API,但我没有获得太大的成功:

stringWithCString:encoding: stringWithUTF8String: stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;

已编辑 我有字符串øæ-test-2.txt,我将其编码如下:

char *s = "øæ-test-2.txt";
NSString *enc = [NSString stringWithCString:s encoding:NSASCIIStringEncoding];

但我得到øæ-test-2.txt 作为输出。 现在我想取回原始字符串,即øæ-test-2.txt


已编辑 我从服务器获取øæ-test-2.txt,我需要通过解码øæ-test-2.txt。我能够从链接中获取输出:http://www.cafewebmaster.com/online_tools/utf_decode

请尝试使用该链接,您会理解我的担忧。

如果有人能给我一些提示、教程或指出正确的方向,我们将不胜感激。

问候

【问题讨论】:

【参考方案1】:

要将 NSString 对象转换为 UTF8 C 字符串,请使用 UTF8String

char *utf8string = [@"A string with ümläuts" UTF8String];

要将 UTF8 C 字符串转换为 NSString 对象,请使用 stringWithUTF8String:initWithUTF8String:

NSString *string = [NSString stringWithUTF8String:utf8string];

请注意,NSString 对象被实现为 UTF-16,因此您不能真正拥有“UTF-8 NSString”(无论如何,编码应该被视为实现细节)。

【讨论】:

好吧,您不能使用 NSASCIIStringEncoding 来读取 UTF-8 字符串(UTF-8 不是 ASCII)。使用 NSUTF8StringEncoding 或(等效但更短的)stringWithUTF8String: 感谢您的回复。我同意我不应该做任何 ASCII 编码。但我从服务器收到“øæ-test-2.txt”的响应。我只需要以某种方式将其转换为“øæ-test-2.txt”。如果我尝试使用下面的链接进行 UTF 解码(“øæ-test-2.txt”),我会得到“øæ-test-2.txt”。 cafewebmaster.com/online_tools/utf_decode等待您的回复【参考方案2】:

而不是

char *utf8string = [@"A string with ümläuts" UTF8String];

这应该是

const char *utf8string = [@"A string with ümläuts" UTF8String];

否则你会遇到类型不兼容的问题。

【讨论】:

以上是关于在 iPhone 中使用 UTF-8 编码和解码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中解码和编码 UTF-8 字符

Python解码和编码

C# UTF-8 base64 编码在 PHP 中无法正确解码

Unicode, UTF-8 and ASCII 编码问题

Java 和 JS/AS3 之间 URL 解码/编码 UTF-8 的差异(错误!?)

编码解码--三种常见字符编码简介:ASCIIUnicode和UTF-8