Rails 3.2.21 / ruby​​ 1.9.3如何在字符串中编码unicode字符

时间:2015-01-16 18:55:23

标签: ruby string unicode unicode-escapes

我需要清理发送给电子邮件服务提供商(Sendgrid)的一些文本,这些文本不支持收件人名称中的unicode,除非它已被转义。

当UTF-8字符串s = "Pablö"如何“\ u逃避”字符串中的任何unicode时,我得到"Pabl\u00f6"

转换为JSON也会转义引号(我不想要):

"Pablö".to_json
=> "\"Pabl\\u00f6\""

我正在寻找的东西就像.force_encoding('binary'),除了Unicode。检查Encoding.aliases.values.uniq我看不到类似'unicode'的内容。

1 个答案:

答案 0 :(得分:0)

我将假设一切都是UTF-8,因为我们不是一起撞击岩石的人。

to_json不是转义引号,它是在字符串中添加引号(因为JSON需要引用字符串)然后{{1}逃避它们(和反斜杠)。

来自inspect的引用应始终存在,以便您可以将它们剥离:

to_json

但请记住,"Pablö".to_json[1..-2] # Lots of ways to do this... => "Pabl\\u00f6" 和UTF-8的行为取决于您正在使用的JSON库以及可能的其他内容。例如,在我的库存Ruby 2.2中,标准JSON库单独留下了UTF-8; JSON规范对UTF-8非常满意,那为什么还要编码呢?所以你可能想用以下的东西自己做:

to_json

大于127的任何内容超出了ASCII范围,因此简单的ord测试可以处理s.chars.map { |c| c.ord > 127 ? '\u%.4x' % c.ord : c }.join öñ等所有内容......您需要如果您需要编码其他字符(例如µ),请调整map块。