在Ruby中以unicode代码的形式打印字符串
有什么方法可以调用“hello”来获取在Ruby中以unicode代码的形式打印字符串,ruby,string,unicode,Ruby,String,Unicode,有什么方法可以调用“hello”来获取'\u0068\u0065\u006c\u006c\u006f'?像这样吗 "hello".unpack('U*').map{ |i| "\\u" + i.to_s(16).rjust(4, '0') }.join => "\\u0068\\u0065\\u006c\\u006c\\u006f" 是和否。String#codepoints以整数数组的形式返回这些值: "hello".codepoints #=> [104, 101, 108,
'\u0068\u0065\u006c\u006c\u006f'
?像这样吗
"hello".unpack('U*').map{ |i| "\\u" + i.to_s(16).rjust(4, '0') }.join
=> "\\u0068\\u0065\\u006c\\u006c\\u006f"
是和否。String#codepoints
以整数数组的形式返回这些值:
"hello".codepoints #=> [104, 101, 108, 108, 111]
如果需要将其作为转义序列,请尝试以下操作:
"hello".codepoints.map {|c| "\\u#{sprintf("%04x", c)}"}.join
如果您想要另一个解决方案(在评论中归功于@MattyK):
或者,如果您喜欢稍微少一点的符号:“hello”.codepoints.map{| c |'\u%04X'%c}。join@MattyK:说得好。忘了你也可以在Ruby中这么做,而不仅仅是python。@MattyK我实际上最喜欢你的版本,所以我把它添加到Linuxios的答案中并选择了它。@Em拟人化:正如你所知,SE的政策是只让帖子的所有者向他们的帖子添加新内容。我很高兴添加它,这就是为什么你的编辑被拒绝的原因。@An拟人:当然。我只是想让你知道。@EdwardFalk我在遍历每个字符,使用
#ord
获得数字表示,然后使用rjust(4,'0')
和前缀'\u'
。这是可行的,我只是希望有一种方法可以在一条(短)线上完成这一切。请参阅和。
"hello".codepoints.map{|c| '\u%04X' % c}.join