ruby: исправьте строки-utf8 - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть входные данные (через File.popen), в основном это utf8, но иногда в них есть символы iso8859-1.Я хочу, чтобы все, что не является допустимой последовательностью utf8, интерпретировалось как iso8859-1 и заменялось соответствующей (двухбайтовой) последовательностью utf-8 (и результатом является строка в кодировке UTF-8).

Что такоеэффективный способ сделать это в рубине?Это обработает весь вывод git log, поэтому он должен быть достаточно быстрым.

1 Ответ

0 голосов
/ 29 ноября 2018

начиная с ruby ​​2.1.0 (afaik), вы можете использовать scrub для выполнения такого рода уродливого кодирования:

https://ruby -doc.org / core-2.1.0 / String.html # method-i-scrub

Если строка является недопустимой последовательностью байтов, замените недопустимые байты заданным символом замены, в противном случае возвращается self.Если указан блок, замените недопустимые байты возвращаемым значением блока.

"abc\u3042\x81".scrub #=> "abc\u3042\uFFFD"
"abc\u3042\x81".scrub("*") #=> "abc\u3042*"
"abc\u3042\xE3\x80".scrub{|bytes| '<'+bytes.unpack('H*')[0]+'>' } #=> "abc\u3042<e380>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...