rubyでjson内のマルチバイト文字列をエスケープする方法メモ。
rubyでjson内のマルチバイト文字列をエスケープする方法
json内のマルチバイト文字列をエスケープする際は、unicodeコードポイント表記がよく使われる。
rubyでは下記のコードでunicodeコードポイント表記にエスケープできる。
[1] pry(main)> "こんにちは".unpack('U*').map{ |i| "\\\\u" + i.to_s(16).rjust(4, '0') }.join => "\\\\u3053\\\\u3093\\\\u306b\\\\u3061\\\\u306f"
エスケープされた上記の文字列は、json内では下記のようにデコードできる。
var hello = "\\u3053\\u3093\\u306b\\u3061\\u306f"; console.log(hello); # 出力 こんにちは
HTMLのエスケープ、javascriptのエスケープ、json内のマルチバイト文字列のエスケープはそれぞれ異なっている点にご注意ください。
参考リンク
Ruby文字列のUnicodeエスケープシーケンスをデコードする
How do I escape a Unicode string with Ruby?