Подтвердить что ты не робот

Запись и чтение файла с помощью кодировки 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.

4b9b3361

Ответ 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 к открытым параметрам?