2016-11-20 14 views
1

Моя тайская строка: "หลับตา ฝัน ถึง ชื่อ เธอ"Ruby: как перекодировать строку utf-8?

и мне нужно вывести кодировку UTF-8, как это: «\ u0e08 \ u0e2d \ u0e21 \ u0e40 \ u0e27 \ u0e17 \ u0e22 \ u0e4c \ u0e21 \ u0e2b \ u0e32"

на данный момент, я установил 'Iconv' камень и я использую

string = Iconv.conv('unicode', 'utf-8', string) 

Но это не работает.

invalid encoding ("unicode", "utf-8") (Iconv::InvalidEncoding) 

Нужно ли использовать Iconv или кодировать? (Я на Ruby 2.3.1)

ответ

0

Вы лучше всего работаете с .encode, он находится в стандартной библиотеке. Iconv является устаревшим, так как Руби 1.9.3

Но когда я

"หลับตาฝัน ถึงชื่อเธอ".encode("utf-8") 

я получить другой результат, как и тот, который вы хотите.

EDIT: не тестировалось в IRB, но в сценарии как этот

# coding: UTF-8 
p "หลับตาฝัน ถึงชื่อเธอ".encode("utf-8") # "\u0E2B\u0E25\u0E31\u0E1A\u0E15\u0E32\u0E1D\u0E31\u0E19\u0E16\u0E36\u0E07\u0E0A\u0E37\u0E48\u0E2D\u0E40\u0E18\u0E2D" 

Вы уверены, что вашего желаемого результата?

+0

В IRB (и в моем коде) ' "หลับตา ฝัน ถึง ชื่อ เธอ" .encode ("UTF-8")' Просто выводит ' "หลับตา ฝัน ถึง ชื่อ เธอ"' – matski

+0

Благодаря @peter Похоже, IRB даже не узнавая Юникода: ' "หลับตา ฝัน ถึง ชื่อ เธอ" .encoding => # <Кодировка: UTF-8> "\ u0E2B \ u0E25 \" кодирования => # <Кодировка: UTF. -8> ' – matski

+0

не может даже отображать тайские символы в irb, должно быть что-то о кодировке (я на окнах), протестируйте ее в сценарий вроде I EDITed – peter

0
"Développement".encode("iso-8859-1").force_encoding("utf-8") 
#=> "Développement" 

Необходимо принудительно кодировать.