Строка поступает из БД как \\ xC3 \\ xB6, но мне нужен реальный символ "ö" для записи в CSV - PullRequest
0 голосов
/ 05 ноября 2018

Я читаю строку YAML из базы данных, которую я не могу контролировать, и в которой Юникод хранится как строковые литералы.

Я хотел бы вывести фактический символ ö в CSV-файл, но он все еще выдает \\xC3\\xB6

Справка.

1 Ответ

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

База данных содержит некорректные строки. Поскольку вы не можете исправить ошибку в ее источнике (т.е. в базе данных), вы можете использовать gsub для замены каждой шестнадцатеричной escape-последовательности на ее действительное значение:

str = "\\xc3\\xb6"
#=> "\\xc3\\xb6"
str.length
#=> 8

str.gsub!(/\\x(\h{2})/) { [$1].pack('H2') }
#=> "\xC3\xB6"
str.length
#=> 2

Затем вы можете указать Ruby интерпретировать байты строки как UTF-8:

str.force_encoding('UTF-8')
#=> "ö"
str.length
#=> 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...