2012-03-23 3 views
3

Я хотел бы преобразовать «HELLO» в «HELLO», удалив все специальные символы, которые вызывают проблемы, когда вставлен в базу данных. Они, похоже, не являются частью UTF8.Как бороться с символами, такими как «» в Ruby

Я пытаюсь выяснить Iconv, но я вроде застрял здесь:

str = "A string with " to "A string with " 
some_format = "I have no clue what format this is" 
Iconv.conv(some_format, 'UTF-8//IGNORE', str) 

Делать это:

Iconv.conv('UTF-16', 'UTF-8//IGNORE', str) 

... возвращается ...

\376\377\000H\000E\000L\000L\000O?G?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?????\342 

Я не хочу конвертировать в нечто иное, чем UTF8, потому что мне приходится иметь дело с арабскими персонажами, китайцами, японцами, корейцами ...

Любая помощь/указатели будут оценены. Я использую Ruby 1.8.7, но мне нужно очень скоро перейти на 1.9.3. Решение, которое работает в обеих ситуациях, лучше всего, но только для 1.9.3 тоже хорошо.

+0

Откуда берутся эти «персонажи»? Если они «не являются частью utf-8» (что я не уверен, даже имеет смысл), какова их кодировка, когда вы их получите? – geoffspear

+0

@Wooble: они исходят от пользовательских входов. Я не уверен, какими они должны быть. Поскольку существует UTF-16, это может иметь смысл http://en.wikipedia.org/wiki/UTF-16 – marcgg

+0

, но UTF-8 и UTF-16 являются просто кодировками набора символов Юникода. Если в юникоде существует глиф, он может быть представлен в любой кодировке. Я предполагаю, что у вас действительно есть не символы, а байты в неизвестной кодировке. Вы должны убедиться, что при вводе данных от пользователя вы знаете, какую кодировку они отправляют. – geoffspear

ответ

4

Вот способ, чтобы удалить символы, не присутствующие в определенной кодировке (при преобразовании строки в другую кодировку)

# -*- coding: utf-8 -*- 
a = "⚒og" 
p a => ⚒og 
p a.encode('iso-8859-1', :undef => :replace, :replace => '') => og 

Однако ваша проблема может быть различной. Потому что очень маловероятно, что эти проблемные символы не являются частью utf-8. Возможные проблемы:

  1. Может быть, это просто, что шрифт, который вы используете, не знаю, как отобразить эти символы. Очень мало шрифтов имеют полный охват символов utf-8. Я не знаю, как вы пытаетесь отобразить эти строки, но убедитесь, что используете шрифт с хорошим охватом символов. Например DejaVu, например, http://dejavu-fonts.org/wiki/Main_Page

  2. Вы уверены, что ваша база данных настроена правильно, чтобы использовать utf-8?

  3. Также будьте осторожны, потому что ваша строка может быть совершенно прекрасной, но не отображаться в вашем приложении терминала или базы данных из-за неполной поддержки utf-8 (со мной раньше было). Поэтому иногда бывает сложно отлаживать, когда ваш отладочный дисплей прослушивается ... (это имеет смысл?)

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