首先,您的编码看起来不正确:
'社員番号'.force_encoding("Shift_JIS").encode!
#=> "\x{E7A4}\xBE\x{E593}\xA1\x{E795}\xAA\x{E58F}\xB7"
force_encoding
从中获取字节str1
并将它们解释为 Shift JIS,而您可能希望将字符串转换为 Shift JIS:
'社員番号'.encode('Shift_JIS')
#=> "\x{8ED0}\x{88F5}\x{94D4}\x{8D86}"
接下来,您可以将文件名传递给CSV.read
, 所以而不是:
file = File.open(filename)
CSV.read(file)
你可以写:
CSV.read(filename)
也就是说,您可以使用 Shift JIS 编码的字符串:
require 'csv'
str1 = '社員番号'.encode("Shift_JIS")
str2 = 'メールアドレス'.encode("Shift_JIS")
csv = CSV.read('SyainInfo.csv', encoding: 'Shift_JIS', headers: true)
csv[str1]
csv[str2]
或者——这就是我要做的——你可以通过指定第二个编码来处理 UTF-8 字符串:
require 'csv'
str1 = '社員番号'
str2 = 'メールアドレス'
csv = CSV.read('SyainInfo.csv', encoding: 'Shift_JIS:UTF-8', headers: true)
csv[str1]
csv[str2]
encoding: 'Shift_JIS:UTF-8'
指示CSV
读取 Shift JIS 数据并将其转码为 UTF-8。相当于传递'r:Shift_JIS:UTF-8'
给File.open