Ruby 请教字符串生成问题

yandy0725 · 2012年08月07日 · 最后由 yandy0725 回复于 2012年08月07日 · 3475 次阅读

有个关于生成字符串的问题,其实自己写个函数也可以解决,只是想请教下,有没有现成的方法。 问题描述如下: 我们都知道,utf8 编码下

x ="你好!"
x="\xe4\xbd\xa0\xe5\xa5\xbd!"
x= "\344\275\240\345\245\275!"

是等效的赋值语句。 然而如果某天赋值语句的右边部分是从文件读取的。 文件里面不是用 utf8 编码的"你好",而是直接存储的 "\344\275\240\345\245\275!"或"\xe4\xbd\xa0\xe5\xa5\xbd!" 如果还是直接读出来赋值,得不到原来的字符串,而是这样的字符串:

"\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd!"

就是说"\"只是作为一个字符被读入了,没有起到反义的作用。

是否有现成的方法,可以得到原先的那种转义过的字符串?

1.9.3-p194-patch :004 > "\344\275\240\345\245\275!".unpack('U*').pack('U*')
 => "你好!" 

Hi,可能是我描述得不够清楚。文件里面直接写的

"\344\275\240\345\245\275!"

所以如果读进来,是这样的字符串

"\\344\\275\\240\\345\\245\\275!"

如果是终端模拟

> str = "\\344\\275\\240\\345\\245\\275!"
> str.unpack('U*').pack('U*')
=> "\\344\\275\\240\\345\\245\\275!"

刚刚有人提供了一个方法,可以用,贴上来

x = "\\344\\275\\240\\345\\245\\275!"
eval "\"#{x}\""
需要 登录 后方可回复, 如果你还没有账号请 注册新账号