Запись и чтение файла с помощью кодировки utf-8
Я читал все связанные с 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
это работает отлично. корректно отображает символ © в файле, и он читает мне письмо и печатает его на экране.
но когда я использую этот же код в своем фактическом проекте, я получаю это в файле вместо символа ©: \u00A9
FWIW: Я получаю этот результат при запуске теста rspec (v1.2.9) против моего кода. спецификация создает файл с символом © в нем, а затем считывает файл обратно, чтобы проверить содержимое.
Я запускаю это в Ruby 1.9.2 на данный момент, но мне также нужно полностью поддерживать Ruby 1.8.6. Это среда Windows с RubyInstaller.org версиями Ruby.
Ответы
Ответ 1
Если я выполняю ваш код, я получаю сообщение об ошибке на специальном символе. Можете ли вы попробовать этот код?
# 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
На моем окне окна я получаю
#<Encoding:Windows-1252>
test © foo
Я понятия не имею, почему существует там.
Ответ 2
Прочитайте файл с меньшим количеством кода:
# encoding: UTF-8
file_content = File.open("test.txt", "r:UTF-8", &:read)
Ответ 3
На какой ОС выполняется ваше приложение? Может быть, кодировка по умолчанию для файла ASCII. Помогает ли вам добавить w:utf-8
и r:utf-8
к открытым параметрам?