为什么
# 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(编码::兼容性错误)”?
答案 0 :(得分:3)
ruby文件开头的注释,只确定了源编码,即它告诉ruby编码ruby文件的编码。它不会告诉它你打开的文件编码的编码 - 对于它仍然使用系统的默认编码,除非您特别请求另一个。
显然系统的默认编码是CP852,因此如果要使用utf-8打开文件,则必须在打开文件时指定该编码(将:encoding => "utf-8"
作为参数传递给{{ 1}})。
答案 1 :(得分:0)
你的脚本在我的盒子上运行正常。
错误来自终端应用程序还是来自Ruby?
我的终端应用设置为使用utf-8。
您可以通过在打开文件时显式提供编码来避免此问题。请参阅http://www.ruby-doc.org/core/classes/File.html#M000069并点击IO :: new。
的链接答案 2 :(得分:0)
这应该解释很多
# 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"