Ruby 关于 “\x80\u3042” 的解释

runup · 2015年12月16日 · 最后由 runup 回复于 2015年12月17日 · 3629 次阅读

http://ruby-doc.org/core-2.2.3/String.html#method-i-each_char 中出现的 bytesize 方法,其中

"\x80\u3042".bytesize  #=> 4

求教:\x80\u3042 是什么意思?

\x80\u3042 是 encoding string,就是一种以字符编码,而非字符本身来表示的 String。

\u3042 是 unicode 编码,表示一个以 unicode 编码的字符。

\x80 是一个 hex 的编码,转换成 10 进制表示 128,即在字符编码表中第 128 位。刚刚好超过了 ASCII 规定的 0~127 个字符,所以这里 \x80 表示一个非 ASCII 字符,在不同编码下可以代表不同的字符。

我觉得这里用 \x80 只是为了证明 Ruby 的默认字符编码 UTF-8,且占用两个字节,即使是所有非 ASCII,但是又不知道具体什么编码的字符也是一样。

计算机并不能直接处理操作字符与符号,它只认识 0、1 这两个数字,所以如果想让计算机显示各种各样的字符与符号,就必须定义它们与数字的一一映射关系,也就是我们所熟知的字符编码

#1 楼 @lgn21st 受教了,感谢解释的这么耐心。

#1 楼 @lgn21st

\u3042  unicode 编码,表示一个以 unicode 编码的字符。

如果是 unidode 编码,一般就是\u这种形式么?是否能提供一些参考资料,另外 unicode 和其其中一种实现形式 utf-8 的字节数是不一样的,那么如何区分这两种表示?

#5 楼 @runup 这些问题都非常容易搜到,我就不帮你搜了。

#6 楼 @lgn21st OK,这里谢过~问题很小,非常感谢。

终端测试了下:

/u80".bytesize= 1, "/u3042".bytesize=3
需要 登录 后方可回复, 如果你还没有账号请 注册新账号