【问题标题】:Ruby, "incompatible character encodings: UTF-8 and CP852 (Encoding::CompatibilityError)"Ruby,“不兼容的字符编码:UTF-8 和 CP852 (Encoding::CompatibilityError)”
【发布时间】:2018-01-07 21:44:06
【问题描述】:

为什么

# 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)”?

【问题讨论】:

    标签: ruby encoding


    【解决方案1】:

    您的 ruby​​ 文件开头的注释仅确定源编码,即它告诉 ruby​​ ruby​​ 文件是用哪种编码编码的。它不会告诉它您正在打开的文件是用哪种编码编码的 - 对于除非您特别请求另一个,否则它仍然使用系统的默认编码。

    显然你的系统默认编码是 CP852,所以如果你想使用 utf-8 打开一个文件,你必须在打开文件时指定该编码(将:encoding => "utf-8" 作为参数传递给File.open) .

    【讨论】:

      【解决方案2】:

      您的脚本在我的盒子上运行良好。

      错误来自您的终端应用程序还是来自 Ruby?

      我的终端应用程序设置为使用 utf-8。

      您可以通过在打开文件时显式提供编码来避免此问题。请参阅 http://www.ruby-doc.org/core/classes/File.html#M000069 并点击指向 IO::new 的链接。

      【讨论】:

        【解决方案3】:

        这应该解释很多

        # 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"
        

        【讨论】:

          猜你喜欢
          • 2012-07-29
          • 1970-01-01
          • 2011-03-14
          • 2014-12-11
          • 1970-01-01
          • 2012-07-12
          • 2015-11-04
          • 2011-07-14
          • 2012-01-14
          相关资源
          最近更新 更多