2014-01-09 5 views
0

Скачал с разделителями табуляции файл, и я пытаюсь создать сценарий, чтобы прочитать его, но линии выходят так:конвертировать юникод в текст рубин

"\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." 
+0

Можете ли вы предоставить сценарий, который вы используете в настоящее время, для чтения файла и, возможно, самого файла? – tessi

ответ

0

После некоторых исследований и с помощью от another forum, мне удалось вместо этого использовать CSV. Это был код, который работал для меня:

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

В конце концов, CSV мне подходит лучше, потому что это табуляцией файл.

Спасибо всем за ваши комментарии в любом случае!

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

+0

Что такое прецедент проверки '# external_encoding'? Я никогда не использовал его, прежде чем спрашивать .. –

+0

У меня тоже нет, тбх. Пример от nuclearsquid.com. Однако, как я понимаю, он хранит кодировку исходного файла, прежде чем рубин преобразует его (в utf8 в приведенном выше). Я предполагаю, что, возможно, условно конвертировать файлы или что-то в этот порядок. –

+0

f = File.open (имя файла, «r: utf-16: utf-8»), но в итоге я смог использовать CSV вместо этого, поскольку это был фактически файл с разделителями табуляции. Первоначально я не думал, что могу использовать его, потому что у меня были некорректные ошибки CSV, но мне удалось найти решение, которое я опубликую в качестве ответа. Спасибо за вашу помощь! – PrincessLilly

Смежные вопросы