gpt4 book ai didi

ruby - 显示 iso-8859-1 编码的数据给出奇怪的字符

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:52 26 4
gpt4 key购买 nike

我有一个 ISO-8859-1 编码的 csv 文件,我尝试用 ruby​​ 打开和解析它:

require 'csv'

filename = File.expand_path('~/myfile.csv')
file = File.open(filename, "r:ISO-8859-1")
CSV.parse(file.read, col_sep: "\t") do |row|
puts row
end

如果我在调用 File.open 时遗漏了编码,我会得到一个错误

ArgumentError: invalid byte sequence in UTF-8

我的问题是对 puts row 的调用显示奇怪的字符而不是挪威字符 æ,ø,å:

BOKF�RINGSDATO

如果我在 textmate 中打开文件,我会得到同样的结果,强制它使用 UTF-8 编码。

通过将文件内容分配给一个字符串,我可以检查该字符串使用的编码。正如预期的那样,它显示 ISO-8859-1。

所以当我put每一行时,为什么它输出字符串为UTF-8?与 csv 库有关吗?

我使用 ruby​​ 1.9.2。

最佳答案

通过尝试文档中的不同内容找到了自己的答案:

require 'csv'

filename = File.expand_path('~/myfile.csv')
File.open(filename, "r:ISO-8859-1") do |file|
CSV.parse(file.read.encode("UTF-8"), col_sep: "\t") do |row|
# ↳ returns a copy transcoded to UTF-8.
puts row
end
end

如您所见,我所做的只是在 CSV 解析器获取之前将字符串编码为 UTF-8 字符串。


编辑:
在 macruby-head 上尝试这个解决方案,我从 encode( ) 得到以下错误信息:

Encoding::InvalidByteSequenceError: "\xD8" on UTF-8

尽管我在打开文件时指定了编码,但 macruby 使用 UTF-8。这似乎是一个已知的 macruby 限制:Encoding is always UTF-8

关于ruby - 显示 iso-8859-1 编码的数据给出奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com