2016-09-27 5 views
0

я использовал Iconv заменить символ:как заменить нон символов ASCII их соответствующего символа в рубин 1.8.7

<%= Iconv.iconv("ascii//translit", "utf-8", "ENDÜœSTRIYEL").to_s %> 

он показывает, END oeSTRIYEL

, тогда как в IRB он показывает, как это:

irb(main):006:0> Iconv.iconv('ascii//translit', 'utf-8', 'ENDÜœSTRIYEL').to_s 
=> "ENDUoeSTRIYEL" 

Как получить полный перевод символов nonascii, как в irb?

Спасибо.

ответ

0

Iconv объект из Glibc имеет транслитерации, которая зависит от локализации:

$ echo "ENDÜœSTRIYEL" | LC_ALL=C iconv -f utf-8 -t ascii//translit 
END?oeSTRIYEL 
$ echo "ENDÜœSTRIYEL" | LC_ALL=de_DE.UTF-8 iconv -f utf-8 -t ascii//translit 
ENDUEoeSTRIYEL 
$ echo "ENDÜœSTRIYEL" | LC_ALL=ja_JP.UTF-8 iconv -f utf-8 -t ascii//translit 
ENDUoeSTRIYEL 

Как вы можете видеть, три различных результаты для трех различных мест.

Если хостинг-сервер, который предназначен для обработки ввода пользователей в разных странах, у вас есть два варианта:

  • Использование один стандарт для всех пользователей, и надеюсь, что это достаточно хорошо для всех.
  • Временно переключите локаль для каждого преобразования (используя uselocale, а не setlocale). Однако я не знаю, доступен ли в Ruby uselocale.
+0

, но im использование ruby ​​1.8.7 .. я не мог использовать, как указано выше –