Написать и прочитать файл с кодировкой utf-8 - PullRequest
41 голосов
/ 02 марта 2011

Я перечитал все вопросы, связанные с UTF-8 и сообщения в блоге, и у меня есть следующий пример в файле test.rb:

# encoding: UTF-8
File.open("test.txt", "w") do |f|
  f.write "test © foo"
end

File.open("test.txt", "r") do |f|
  puts f.read
end

, это прекрасно работаетis правильно создает символ © в файле, читает мне обратно и печатает его на экране.

, но когда я использую этот же код в моем реальном проекте, я записываю его в файлвместо символа ©: \u00A9

FWIW: я получаю этот результат при запуске теста rspec (v1.2.9) для моего кода.спецификация создает файл с символом ©, а затем считывает файл обратно, чтобы проверить его содержимое.

В данный момент я запускаю это в Ruby 1.9.2, но мне также нужно поддерживать вплоть до Ruby 1.8.6.Это среда Windows с RubyInstaller.org версиями Ruby.

Ответы [ 3 ]

46 голосов
/ 11 мая 2012

Если я выполняю ваш код, я получаю сообщение об ошибке специального символа.Можете ли вы попробовать этот код?

# encoding: UTF-8
File.open("test.txt", "w:UTF-8") do |f| 
  f.write "test \u00A9 foo" 
end 

#Encoding.filesystem = "UTF-8"
p Encoding.find("filesystem") 
File.open("test.txt", "r:UTF-8") do |f| 
  puts f.read 
end 

На моем окне Windows я получаю

#<Encoding:Windows-1252>
test © foo

Я понятия не имею, почему там есть ..

40 голосов
/ 24 января 2014

Прочитать файл с меньшим кодом:

# encoding: UTF-8
file_content = File.open("test.txt", "r:UTF-8", &:read)
2 голосов
/ 02 марта 2011

На какой ОС работает ваше приложение?Возможно, кодировка по умолчанию для файла - ASCII.Поможет ли вам добавить w:utf-8 и r:utf-8 к открытым параметрам?

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