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

时间:2014-07-10 02:16:20

标签: ruby character-encoding

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

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

这有意义吗?

1 个答案:

答案 0 :(得分:1)

我希望这两台机器使用不同的默认编码。您可以通过检查Encoding.default_external的返回值来验证这一点 - 它应该与您从File.read( file_path )获得的两种不同编码相匹配。如果您假设给定文件以某种方式以Ruby检测到的方式声明其编码,则您很可能错误 - 在某些情况下Ruby可能会确定正确的String编码,但是从磁盘读取文件不是其中之一。事实上,许多编码在技术上并不能单独与文件区分开来,虽然可以有一个很好的猜测,但这并不是你应该从任何语言的基本文件阅读库中得到的。

documentation on Encoding.default_external解释了它适用的地方。它包括未指定文件编码的文件读取。

一个可能的根本原因是每台机器上的区域设置不同。

最佳修复程序将根据您的代码需要执行的操作而有所不同。一个简单的修复,如果您希望应用程序在任何地方使用一致的编码并忽略机器设置,只需设置值:

Encoding.default_external = 'UTF-8'

另一个选项,如果问题是特定于此文件的,并且您想在应用程序的其他位置使用计算机设置,则打开具有特定编码的文件:

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

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