Как бороться с такими символами, как «» в Ruby - PullRequest
3 голосов
/ 23 марта 2012

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

Я пытаюсь выяснить 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.

1 Ответ

4 голосов
/ 23 марта 2012

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

# -*- 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 (случалось со мной раньше). Так что иногда бывает сложно отлаживать, когда ваш экран отладки прослушивается ... (имеет ли смысл?)

...