【问题标题】:Objective-C NSString encoding UmlautsObjective-C NSString 编码变音符号
【发布时间】:2012-01-08 23:33:14
【问题描述】:

我有以下问题:

我在 UITextField 中输入数据,然后我想将其发送到服务器。但我输入的数据可能包含变音符号(ö、ä、ü、...)。然后我在将它传递给服务器时得到错误的编码。但我是用 UTF8 编码的。

NSString *s = @"ö";
NSLog(@"%@", s);
NSLog(@"%s", s.UTF8String);

我做错了什么?在第二行中,我看到了一个完美的“ö”,但在第三行中,我看到了:√∂

网上有很多关于编码的帖子,但都没有真正解决问题。

【问题讨论】:

  • 您的输出日志/终端/任何内容是否被正确声明/解释为 UTF-8?

标签: objective-c encoding nsstring diacritics


【解决方案1】:

与服务器通信时,您是否正确编码或解码?

记住 NSString 有那些奇妙的功能:

stringByAddingPercentEscapesUsingEncoding:

stringByReplacingPercentEscapesUsingEncoding:

至于在第三个 NSLog 行输出中看到垃圾,格式中的“%s”表示 NSLog 期望 C 样式的字节集合,它可能无法正确显示高 ascii 值。而 NSLogs 中的 "%@" 格式意味着 NSString 对象和所有字符串编码都应该为此正常工作。

【讨论】:

  • %s with UTF-8 适用于我,前提是我的终端设置正确。
  • @Wevah 当然很好,%s 也适用于我......但问题是它是否适用于变音符号或其他 diacritics
  • 实际上有 2 个问题:我没有使用 stringByAddingPercentEscapesUsingEncoding: 我应该使用 %@ 代替或 %s 进行字符串格式化。现在可以了。
【解决方案2】:

在处理 UTF8 和 NSString 时,您可能应该使用 [@"ö" dataUsingEncoding:NSUTF8StringEncoding] 来获取可以通过网络发送的 NSData 对象。这将始终正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多