2013-03-06 4 views
3

В настоящее время я работаю над приложением Rails с проверкой PayPal. PayPal связывается с моим приложением с сообщениями IPN.Как преобразовать строку с символами xf6 в удобочитаемую?

Во многих случаях все работает нормально, но если кто-то использует специальные символы, такие как немецкие умлауты (öüäß), я получаю \xf6 в строке.

Как я могу преобразовать это в считываемый человеком символ 'ö'?

+0

Какая полная строка (с '\ xf6') вернулась к вам? (Предполагая, что он возвращается в виде строки, иначе вы читаете его из файла или что-то в этом роде) – iamnotmaynard

+0

IPN - это запрос POST на сервер. Полезная нагрузка, которую я получаю с параметрами. Например, я могу получить имя плательщика с параметрами [: last_name]. И в моем случае это говорит «Sch \ xF6ning» вместо этого, если Schöning –

ответ

7

Проблема в том, что данные были закодированы как Windows-1252, но рубин не обнаружит это автоматически. Вы можете уговорить его так:

my_string = "Sch\xF6ning" 
my_string.force_encoding('windows-1252').encode('utf-8') 
=> "Schöning" 

Вы можете сделать многоразовый конвертер, чтобы помочь вам сделать то же самое:

ec = Encoding::Converter('windows-1252', 'utf-8') 
ec.convert(my_string) 
=> "Schöning" 
+0

Хороший ответ, но iso-8859-1 - латинский-1. Windows-1252 - это другая кодировка. – pguardiario

+0

@pguardiario: Вы правы - это [основа для Windows-1252] (http://en.wikipedia.org/wiki/Windows-1252), но они не идентичны. Windows-28591 на самом деле является страницей, которая соответствует спецификации ISO. – PinnyM

+0

@PinnyM: Почему вы изменили свой ответ? Ты был прав. Кодировка была windows-1252, и ваш код работал для меня хорошо. –

0

Заметьте, что есть установка на PAYPAL стороны для этого:

В учетной записи продавца PayPal перейдите по адресу: Профиль> Мои инструменты для продажи> Кодирование языка кнопок PayPal> Дополнительные параметры

Смежные вопросы