Я не знаю, как сообщить Iconv
, чтобы перекодировать мои строки на удобочитаемый вывод.Как конвертировать UTF8 в cp1252 правильно (1.8.7)
Пример: Я конвертирую «ЛАТИНСКОЕ КАПИТАЛ ПИСЬМА С КАРОНОМ» U+0160, отображаемое как Š
.
Iconv.conv('cp1252', 'UTF8', 'Š'
), однако возвращает "\212"
Я бы ожидать, что она возвращает эквивалентный CP1252 характер, 0x8A
, также показан как Š
. Однако напечатанный результат по-прежнему "\212"
- это восьмеричное представление (\212
- это восьмеричное значение для 0x8A
или 138
).
Я также пробовал некоторые более экзотические инструкции кодирования, такие как cp1252//IGNORE//TRANSLIT
, с тем же выходом.
Что я делаю неправильно, и как это сделать?
Спасибо
EDIT
Каспер говорит, консольный вывод должен корректно отобразить характер, но это не так. Возможно, я просто не знаю, как установить его для принятия cp1252.
Я был бы признателен, если кто-нибудь может сказать мне, как это сделать - я работаю на Ubuntu 13.04 и как регулярно Баш с IRB и RubyMine встроенный в дисплей консоли вывода как "\212"
Выходом locale
en_US.UTF8
для всех значений.
Iconv.conv('cp1252', 'UTF8', 'Š').inspect
печатает "\"\\212\""
Iconv.conv('cp1252', 'UTF8', 'Š').each_byte { |b| p b }
печатает 138
и "\212"
Звучит правильно для меня. 'puts '\ 212" 'должен выводить то, что вам нужно, когда ваш терминал настроен на cp1252? – Casper
Casper прав - вы должны получить строку от Ruby до устройства, которое знает, как правильно отображать его. Ruby не отображает глиф для вас, и если в сомнении 'irb' или' inspect' выведет экранированный восьмеричный так, по крайней мере, вы можете однозначно увидеть, что находится в строке. –
@ Каспер, это то, чего я ожидал, однако я получаю буквально «\ 212», вот почему я спрашиваю. См. Редактирование. – kostja