2015-09-03 8 views
3

Я знаю, что я могу избежать основного символа Unicode в Ruby с escape-последовательности \uNNNN. Например, для улыбающегося лица U+263A (& # x263A;) Я могу использовать строковый литерал "\u2603".Вывод строки Ruby для дополнительной плоскости Unicode characters

Как избежать символов Юникода больше U + FFFF, которые выходят за пределы basic multilingual plane, как подмигивающая грань: U+1F609 (& # x1f609;)?

Использование формы суррогатной пары, как в Java, не работает; это приводит к недопустимым строке, которая содержит отдельную суррогатные точки коды:

s = "\uD83D\uDE09" # => "\xED\xA0\xBD\xED\xB8\x89" 
s.valid_encoding? # => false 

ответ

1

Вы можете использовать последовательность эвакуации \u{XXXXXX}, где XXXXXX находятся между 1 и 6 шестнадцатеричными цифрами:

s = "\u{1F609}" # => "" 

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

s = "\u{41f 440 438 432 435 442 2c 20 43c 438 440}!" # => "Привет, мир!" 

Вы также можете использовать байтовые экраны для записи литерала, который содержит кодировку UTF-8 символа, хотя это не очень удобно, и не обязательно приводит к кодировке в кодировке UTF-8, если кодировка файла отличается :

# encoding: utf-8 
s = "\xF0\x9F\x98\x89" # => "" 
s.length # => 1 

# encoding: iso-8859-1 
s = "\xF0\x9F\x98\x89" # => "\xF0\x9F\x98\x89" 
s.length # => 4