【问题标题】:Xcode - UTF-8 String EncodingXcode - UTF-8 字符串编码
【发布时间】:2014-03-04 09:58:07
【问题描述】:

我在编码我的String时遇到了一个奇怪的问题

例如:

NSString *str = @"\u0e09\u0e31\u0e19\u0e23\u0e31\u0e01\u0e04\u0e38\u0e13";
NSString *utf = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog("utf: %@", utf);

这在日志中完美运行

utf: ฉันรักคุณ

但是,当我尝试使用我从 JSON 中解析的字符串时:

//str is string parse from JSON
NSString *str = [spaces stringByReplacingOccurrencesOfString:@"U" withString:@"u"];
NSLog("str: %@, str);
NSString *utf = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog("utf: %@", utf);

这在日志中不起作用

str: \u0e09\u0e31\u0e19\u0e23\u0e31\u0e01\u0e04\u0e38\u0e13
utf: \u0e09\u0e31\u0e19\u0e23\u0e31\u0e01\u0e04\u0e38\u0e13

我已经找了几个小时的答案,但仍然没有任何线索

任何将不胜感激!谢谢!

【问题讨论】:

  • 您在NSString *utf = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 之前尝试过[str UTF8String]; 吗?
  • 粘贴创建空格的代码
  • @HimanshuJoshi 是的,我有。没用:/

标签: ios objective-c xcode utf-8


【解决方案1】:

JSON 返回的字符串实际上是不同的 - 它包含转义的反斜杠(对于打印出 JSON 字符串时看到的每个“\”,它实际包含的是 @“\”)。

相比之下,您手动创建的字符串从一开始就已经包含“ฉันรักคุณ”。您不要插入反斜杠字符 - 相反,@"\u0e09"(等)是单个代码点。

你可以替换这一行

NSString *utf = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

用这条线

NSString *utf = str;

并且您的示例输出不会改变。 stringByReplacingPercentEscapesUsingEncoding: 指的是另一种转义。 See here about percent encoding.

您实际需要做的是解析字符串以获取 unicode 代码点的字符串表示形式。这是一个潜在解决方案的链接:Using Objective C/Cocoa to unescape unicode characters。但是,我建议您查看您正在使用的 JSON 库(如果您正在使用)——它们很可能提供了一些透明地为您处理此问题的方法。例如。 JSONkit 会。

【讨论】:

  • 您的第二个链接运行良好!谢谢!你刚刚救了我的命!
  • 您好,我的图片 url 中有 &,所以如果我通过服务服务器将其作为新参数,那么如何解决它。你能告诉我吗?谢谢@janis K
猜你喜欢
  • 2014-06-09
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多