Ruby中的字符串编码问题

时间:2014-04-08 11:02:12

标签: ruby encoding

在ruby 1.9.3-p484中我必须构造一个SMPP包,但是当我将构造的数据包的内容传递给传递它的方法时,会出现一个奇怪的\xC2值。内容。调查过这个问题后,我发现了以下有趣的问题:

"\u008E".force_encoding("BINARY")
 => "\xC2\x8E"

当我想使用二进制编码时,为什么\u00BE变为\xC2\8E?为什么不\x00\x8E

2 个答案:

答案 0 :(得分:1)

这是二进制表示。  看看:

  
    

2010年7月27日星期二22:21:31 +0900,Heesob Park写道:

  
     

我注意到String#inspect results \ x {XXXX}以外的编码   的Unicode。

     

是否有可能接受\ x {XXXX}作为逃脱   字符串序列?

     

IRB(主):004:0> a =“\ xC7 \ xD1 \ xB1 \ xDB”

     

这是二进制表示。

     

IRB(主):010:0>一个1   => “\ X {B1DB}”

https://bugs.ruby-lang.org/issues/3619

这是codepoint代表。

答案 1 :(得分:1)

因为它只是强制编码中的文本,并且您已经看到它存储在内存中。它作为(多字节字符集)数据存储在内存中。对于超过\x7F的字符,它变成了两个字节的表示。所以你可以看到:

"\u008E".force_encoding("BINARY")
# => "\xC2\x8E"