You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C NSLog与Node.js console.log打印特殊字符结果不同的原因?

为什么Objective-C和Node.js输出\xc2\xbfhello的结果不一样?

这个问题的核心根源,是两种语言对字符串字面量中\x十六进制转义的处理规则完全不同,咱们拆解来看:

1. Objective-C的处理逻辑

在Objective-C中,字符串字面量(@"...")的底层是基于UTF-8字节序列来创建NSString对象的:

  • 你写的\xc2\xbf是两个独立的十六进制字节(0xC2和0xBF),编译器会把它们当作UTF-8编码的字节流。
  • 而0xC2 0xBF恰好是Unicode字符¿(倒置问号,U+00BF)的UTF-8编码。
  • 所以NSLog输出时,会正确解码这两个字节为¿,最终输出结果是:¿hello。

2. Node.js的处理逻辑

Node.js(基于JavaScript)的字符串是Unicode字符序列,对\x转义的规则完全不同:

  • JavaScript里的\xXX转义表示的是单个Latin-1(ISO-8859-1)字符,其中XX是两位十六进制数,对应Unicode码点U+00XX。
  • 所以\xc2会被解析为Unicode字符Â(U+00C2),\xbf则是¿(U+00BF)。
  • 最终console.log输出的是这两个字符拼接上hello,也就是:¿hello。

简单总结:Objective-C把\xc2\xbf当作UTF-8字节对解码成单个Unicode字符,而Node.js把它们当作两个独立的Latin-1字符处理,这就是输出差异的本质。

内容的提问来源于stack exchange,提问作者elsonwx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:02:24