0

我有一个文本文件,如果在编码设置为 的 Scite 编辑器中查看utf-8,可以正确显示所有文本,包括带有重音符号的大写字母(即 Á)。

但是,如果我编写一个 ruby​​ 脚本并使用mystring.encode("utf-8")它,在带有重音符号(即 Á)的大写字母上会出现以下错误:

encode': "\x81" to UTF-8 in conversion from Windows-1252 to UTF-8 (Encoding::UndefinedConversionError)

这是预期的行为吗?我如何将整个文本编码为utf-8使用 ruby​​,否则它会在 Scite 编辑器中成功编码?

代码:

ine_file = File.open("../../_data/ine_spain_demographics.csv", 'r')

ine_towns_population_hash = Hash.new

ine_file.each do|line|
    values = line.split(";")
    town_name = values[3]
    population = values[4]

    begin
        ine_towns_population_hash[town_name.encode("utf-8")] = population
    rescue
        puts "problematic string: " + town_name
    end

end
4

2 回答 2

1

似乎它误解了ine_spain_demographics.csv.

查看文档的编码打开您有两个选择:

  1. 在 encode 中使用replace来告诉 Ruby 使用什么字符town_name.encode("utf-8", replace: '')
  2. 识别正确的文件编码并指定它:File.open("../../_data/ine_spain_demographics.csv", 'r:ISO-8859-1')
于 2019-09-11T18:59:57.453 回答
1

您这么说ine_file.external_encodingWindows-1252因为该文件作为 Windows-1252 编码文件打开。然后你说town_name.encode("utf-8")试图将字符串编码为 UTF-8 并且 Ruby 抱怨。但文件实际上是 UTF-8;将 UTF-8 字节读取为 Windows-1252,然后尝试将这些字节重新编码为 UTF-8 是行不通的。

您需要以 UTF-8 模式打开文件:

File.open("../../_data/ine_spain_demographics.csv", 'r:UTF-8')

并停止尝试更改 的编码town_name,只需town_name按原样使用。

于 2019-09-12T17:15:20.597 回答