Ruby, "несовместимые кодировки символов: UTF-8 и CP852 (Encoding :: CompatibilityError)" - PullRequest
2 голосов
/ 31 июля 2011

Почему

# encoding: utf-8
out=File.open("z\\test.txt", "a") 
out.puts "ç"  
out.close
out=File.open("z\\test.txt", "r")
puts out.read+"ś"

приводит к «несовместимым кодировкам символов: UTF-8 и CP852 (Encoding :: CompatibilityError)»?

Ответы [ 3 ]

3 голосов
/ 31 июля 2011

Комментарий в начале вашего файла ruby ​​определил только исходную кодировку, то есть он сообщает ruby, в какую кодировку кодируется файл ruby. Он не сообщает, в какую кодировку открываются файлы, которые вы открываете - длячто она по-прежнему использует кодировку системы по умолчанию, если только вы не запросите другую.

Очевидно, кодировкой вашей системы по умолчанию является CP852, поэтому, если вы хотите открыть файл с использованием utf-8, вам придется указать эту кодировкупри открытии файла (передача :encoding => "utf-8" в качестве аргумента File.open).

0 голосов
/ 07 января 2018

Это должно многое объяснить

# https://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w
inp = "zale\xBFno\x9cci".force_encoding('Windows-1250')

# inp = File.open('content-win-1250.txt', :encoding => 'Windows-1250').read

inp = inp.encode('utf-8')

File.open("tmp.txt", "wb") do |out|
    out.write(inp)
end

# file 'tmp.txt contains "zależności"
0 голосов
/ 31 июля 2011

Ваш скрипт отлично работает у меня на моей коробке.

Ошибка приходит из вашего терминального приложения или из Ruby?

Мое терминальное приложение настроено на использование utf-8.

Вероятно, вы можете избежать этой проблемы, явно указав кодировку при открытии файлов. См. http://www.ruby -doc.org / core / classes / File.html # M000069 и перейдите по ссылкам на IO :: new.

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