我需要清理发送给电子邮件服务提供商(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'的内容。
答案 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
块。