2015-12-19 2 views
1

У меня есть следующая строка:Преобразование символов закодировать в Рубине

string = "Good « Bad" 

« имеет код X00AB. Как я могу конвертировать string в "Good \X00AB Bad"?

Я делаю это, чтобы найти \X00AB, а затем замените его до ближайшего символа ". Я не хочу искать «, потому что это неточно.

ответ

3

Вам не нужно его конвертировать. символы Unicode в Ruby, можно использовать так:

c = "\u00AB" 

(обратите внимание, что это \ и, не \ X)

"\ u00AB" и ««»на самом деле тот же характер:

"\u00AB" == "«" 
=> true 

Таким образом, вы можете найти, как вы хотели:

string = "Good « Bad" 
string.include?("\u00AB") 
=> true 
0

вы можете заменить не-ASCII кодовых с их UTF кодовыми представлениями нами ING Array#pack:

string.gsub(/[^[:ascii:]]/) do |char| 
    char.codepoints.pack("s>") 
end # => "Good \x00\xAB Bad" 

Но, может быть, лучше не жёстко эти преобразования вручную, а также использовать стандартный инструмент для тех преобразований, iconv?

require 'iconv' 
Iconv.conv('ASCII//TRANSLIT', 'UTF8', string) # => "Good << Bad" 
Смежные вопросы