Rails 3.2.21 / ruby 1.9.3 如何在字符串中编码 unicode 字符
Rails 3.2.21 / ruby 1.9.3 how can I \u encode unicode chars within a string
我需要清理一些发送到电子邮件服务提供商 (Sendgrid) 的文本,除非经过 \u 转义,否则收件人名称不支持 unicode。
当 UTF-8 字符串 s = "Pablö"
我如何“\u 转义”字符串中的任何 unicode 以便我得到 "Pabl\u00f6"
?
转换为 JSON 也会转义引号(我不想要):
"Pablö".to_json
=> "\"Pabl\u00f6\""
我正在寻找的是类似 .force_encoding('binary') 的东西,除了 Unicode。检查 Encoding.aliases.values.uniq
我没有看到 'unicode'.
之类的东西
我假设一切都是 UTF-8,因为我们不是穴居人一起敲石头。
to_json
不是 转义 引号,它是 在字符串中添加 引号(因为 JSON需要引用字符串)然后 inspect
转义它们(和反斜杠)。
to_json
中的这些引用应该始终存在,这样您就可以将它们去掉:
"Pablö".to_json[1..-2] # Lots of ways to do this...
=> "Pabl\u00f6"
但是请记住,to_json
和 UTF-8 的行为取决于您正在使用的 JSON 库以及可能的其他因素。例如,在我的股票 Ruby 2.2 中,标准 JSON 库单独保留 UTF-8; JSON 规范对 UTF-8 非常满意,所以为什么要对它进行编码呢?所以你可能想自己做类似的事情:
s.chars.map { |c| c.ord > 127 ? '\u%.4x' % c.ord : c }.join
任何超过 127 的值都超出了 ASCII 范围,因此简单的 ord
测试会处理 ö
、ñ
、µ
、...如果您需要编码其他字符(例如 \n
),您将需要调整 map
块。
我需要清理一些发送到电子邮件服务提供商 (Sendgrid) 的文本,除非经过 \u 转义,否则收件人名称不支持 unicode。
当 UTF-8 字符串 s = "Pablö"
我如何“\u 转义”字符串中的任何 unicode 以便我得到 "Pabl\u00f6"
?
转换为 JSON 也会转义引号(我不想要):
"Pablö".to_json
=> "\"Pabl\u00f6\""
我正在寻找的是类似 .force_encoding('binary') 的东西,除了 Unicode。检查 Encoding.aliases.values.uniq
我没有看到 'unicode'.
我假设一切都是 UTF-8,因为我们不是穴居人一起敲石头。
to_json
不是 转义 引号,它是 在字符串中添加 引号(因为 JSON需要引用字符串)然后 inspect
转义它们(和反斜杠)。
to_json
中的这些引用应该始终存在,这样您就可以将它们去掉:
"Pablö".to_json[1..-2] # Lots of ways to do this...
=> "Pabl\u00f6"
但是请记住,to_json
和 UTF-8 的行为取决于您正在使用的 JSON 库以及可能的其他因素。例如,在我的股票 Ruby 2.2 中,标准 JSON 库单独保留 UTF-8; JSON 规范对 UTF-8 非常满意,所以为什么要对它进行编码呢?所以你可能想自己做类似的事情:
s.chars.map { |c| c.ord > 127 ? '\u%.4x' % c.ord : c }.join
任何超过 127 的值都超出了 ASCII 范围,因此简单的 ord
测试会处理 ö
、ñ
、µ
、...如果您需要编码其他字符(例如 \n
),您将需要调整 map
块。