Строка заменяется на странные символы, когда приписывается к HASH - PullRequest
0 голосов
/ 16 февраля 2019

Я тестирую 2 ситуации и получаю 2 странно разных результата.

Первый:

hash_data_file = CSV.parse(data_file).map {|line|
    puts line[6]
    abort

Возвращается Caixa Econômica Federal с акцентами в нужном месте.

Второй:

hash_data_file = CSV.parse(data_file).map {|line|
    puts :bank => line[6]
    abort

Но возвращается {:bank=>"Caixa Econ\xC3\xB4mica Federal"}, строка с ошибками в кодификации вместо акцентов.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

В первом случае ваш data_file в кодировке UTF-8.Во втором случае data_file имеет двоичное (т.е. 7-битное ASCII) кодирование.

Например, если мы начнем с простого CSV-файла UTF-8:

bank
Caixa Econômica Federal

изатем проанализируйте его в кодировке UTF-8:

CSV.parse(File.open('pancakes.csv', encoding: 'utf-8'))
# [["bank"], ["Caixa Econômica Federal"]] 

, а затем в двоичной кодировке:

CSV.parse(File.open('pancakes.csv', encoding: 'binary'))
# [["bank"], ["Caixa Econ\xC3\xB4mica Federal"]] 

Так что вам нужно исправить кодировку, прочитав файл в правильной кодировке.Трудно сказать больше, поскольку мы не знаем, как открывается data_file.

Посмотрите на

line[6].encoding

, и вы должны увидеть #<Encoding:UTF-8> в первом случае, но #<Encoding:ASCII-8BIT> во втором.

0 голосов
/ 16 февраля 2019

Нет ошибки в кодификации.

"Caixa Econ\xC3\xB4mica Federal" == "Caixa Econômica Federal"
#⇒ true

По какой-то причине при распечатке хеша ruby ​​использует это представление (хотя я не могу воспроизвести его), но в двух словах: строка, которую вы видитедостаточно хорош.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...