将unicode转换为ruby中的文本

将unicode转换为ruby中的文本,ruby,unicode,Ruby,Unicode,我下载了一个以制表符分隔的文件,并试图创建一个脚本来读取它,但结果如下: "\xFF\xFEu\x00s\x00e\x00r\x00-\x00r\x00e\x00p\x00o\x00r\x00t\x00-\x00s\x00e\x00a \x00r\x00c\x00h\x00-\x00r\x00e\x00s\x00u\x00l\x00t\x00s\x00-\x002\x000\x001\x004 \x000\x001\x000\x009\x001\x002\x000\x006\x000\x007\

我下载了一个以制表符分隔的文件,并试图创建一个脚本来读取它,但结果如下:

"\xFF\xFEu\x00s\x00e\x00r\x00-\x00r\x00e\x00p\x00o\x00r\x00t\x00-\x00s\x00e\x00a
\x00r\x00c\x00h\x00-\x00r\x00e\x00s\x00u\x00l\x00t\x00s\x00-\x002\x000\x001\x004
\x000\x001\x000\x009\x001\x002\x000\x006\x000\x007\x00-\x00G\x00M\x00T\x00.\x00\
t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\
x00\r\x00\n"
我认为我需要将(unicode?)转换为简单文本。是否有一个字符串方法可以执行此操作?我搜索了一下,但不明白是哪一个起了作用。下面(带有一系列选项卡)是我在常规文本编辑器中打开文件时看到的,上面引用的行:

"user-report-search-results-20140109120607-GMT."
您需要使用:

旁白:看到所有这些空字符,我怀疑您的源代码是utf16(不确定是小端还是大端)。你可能想要utf8格式的

另外,请注意,您可以动态转换文件:

>> f = File.open("iso-8859-1.txt", "r:iso-8859-1:utf-8")
=> #<File:iso-8859-1.txt>
>> f.external_encoding.name
=> "ISO-8859-1"
>> content = f.read
=> "This file contains umlauts: äöü"
>> content.encoding.name
=> "UTF-8"
>f=File.open(“iso-8859-1.txt”,“r:iso-8859-1:utf-8”)
=> #
>>f.external_encoding.name
=>“ISO-8859-1”
>>content=f.read
=>“此文件包含umlauts:äöü”
>>content.encoding.name
=>“UTF-8”

另见这一相关问题:


经过一些研究并在的帮助下,我设法改用CSV。这就是对我有效的代码:

CSV.foreach(filename, { :row_sep => :auto, :col_sep => "\t", :encoding => 'UTF-16:UTF-8'}) do |row|
最后,CSV更适合我,因为这是一个以制表符分隔的文件


谢谢大家的评论

您能否提供当前用于读取文件以及文件本身的脚本?检查
#外部编码
的用例是什么?我以前从来没有用过它,所以我问……我也没用过,tbh。该示例来自nuclearsquid.com。但据我所知,在ruby将其转换为utf8之前,它保留了原始文件的编码。我猜可能是有条件地将文件或其他东西转换成那种顺序。f=File.open(文件名,“r:utf-16:utf-8”)起了作用,但最终我还是能够使用CSV,因为这实际上是一个以制表符分隔的文件。起初我认为我不能使用它,因为我有一些CSV格式错误,但我设法找到了一个解决方案,我将作为答案发布。无论如何,谢谢你的帮助!