Ruby 为同一文件返回不同编码结果的两台计算机

Ruby 为同一文件返回不同编码结果的两台计算机,ruby,character-encoding,Ruby,Character Encoding,我在两台具有相同文件的不同计算机上运行以下代码,但每台计算机返回的字符编码类型不同: def encoding_type File.read(file_path).encoding.name end 这有什么意义吗?我希望这两台机器使用不同的默认编码。您可以通过检查编码的返回值来验证这一点。默认值\u external-它应该与从文件中获取的两种不同编码相匹配。read(文件路径)。如果您假设给定的文件以Ruby检测到的方式声明了其编码,那么您很可能是错的-Ruby可以在某些情况下确定正确的

我在两台具有相同文件的不同计算机上运行以下代码,但每台计算机返回的字符编码类型不同:

def encoding_type
 File.read(file_path).encoding.name
end

这有什么意义吗?

我希望这两台机器使用不同的默认编码。您可以通过检查
编码的返回值来验证这一点。默认值\u external
-它应该与从
文件中获取的两种不同编码相匹配。read(文件路径)
。如果您假设给定的文件以Ruby检测到的方式声明了其编码,那么您很可能是错的-Ruby可以在某些情况下确定正确的
String
编码,但从磁盘读取文件不是其中之一。事实上,许多编码在技术上与文件本身是不可区分的,尽管可以很好地猜测这不是任何语言的基本文件读取库所期望的

说明了它的适用范围。它包括未指定文件编码的文件读取

一个可能的根本原因是每台机器上的语言环境设置不同

最佳修复方案因代码需要执行的操作而异。如果希望应用程序在任何地方都使用一致的编码并忽略机器设置,一个简单的解决方法是只设置值:

Encoding.default_external = 'UTF-8'
另一个选项是,如果问题特定于此文件,并且您希望在应用程序的其他位置使用机器设置,请使用特定编码打开该文件:

File.read(file_path, :encoding => 'UTF-8')

您还可以更改这两台机器上的区域设置,如果这对这两台机器的其他用途有意义的话。

我猜“是”或“否”的答案不是您想要的?这些机器是什么平台?什么是Ruby版本?文件是否从可能改变文件编码的版本控制系统中签出?这两台机器都是CentOS。两台机器都使用相同版本的Ruby 1.9.3。该文件未从版本控制系统签出。在每台机器上进行精确复制。如果文件的时间超过几秒钟(即,您没有专门复制该文件来测试这一点),也值得使用校验和(例如MD5或SHA1)验证“精确复制”。但是一个很可能的原因是两个Ruby安装有不同的默认外部编码。一般来说,Ruby不“检测”编码,它“假设”它,你必须告诉它应该假设什么。谢谢!这是一个奇妙的解释。