将unicode转换为ruby中的文本

时间:2014-01-09 13:11:11

标签: 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\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?)转换为简单文本。是否有一个字符串方法来执行此操作?我搜索the documentation,但无法理解哪一个可以解决问题。下面(带有一系列标签)是我在常规文本编辑器中打开文件时看到的内容,用于上面引用的行:

"user-report-search-results-20140109120607-GMT."

2 个答案:

答案 0 :(得分:0)

您需要使用String#encode

除此之外:看到所有那些空字符,我怀疑你的源编码是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"

http://nuclearsquid.com/writings/ruby-1-9-encodings/

另见相关问题:

Unicode null symbol in text parsed from file leading to failing equality checks

答案 1 :(得分:0)

经过一些研究并在another forum的帮助下,我设法使用CSV代替。这是对我有用的代码:

CSV.foreach(filename, { :row_sep => :auto, :col_sep => "\t", :encoding => 'UTF-16:UTF-8'}) do |row|

最后,CSV更适合我,因为这是一个制表符分隔的文件。

无论如何,谢谢大家的评论!