假设 a 是一个“ASCII-8BIT”编码的字符串变量,u 是一个“UTF-8”编码的字符串变量(但是其中包含\x**这样的字符),a+u 就会报”编码不兼容”的错误。
a = [192,168,1,100].pack("C*")
p a.encoding #=> #<Encoding:ASCII-8BIT>
u = "\xff\xff\xff\xff\xff\xff"
p u.encoding #=> #<Encoding:UTF-8>
a+u #=> Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8
看来也许\x**这样的字符是只有一个字节的,遇到两个字节作一个字符的 UTF-8 编码就会出问题。 ……但是 ruby 这个报错信息很模糊啊,让人一直误以为出错是因为这两种编码的字符串是不能做连接运算的(其实可以!!)。