В Ruby, как автоматически конвертировать неподдерживаемые символы при обработке текста? - PullRequest
0 голосов
/ 09 января 2011

(с использованием Ruby 1.8)

У меня есть только краткое понимание кодировки и тому подобного ... но я хочу знать, что в любом данном сценарии, обрабатывающем любой данный текстовый файл, есть ли какой-то универсальныйбиблиотека или вызов, который мне нужно сделать, чтобы превратить нестандартные символы в их ближайший печатный эквивалент.Я понимаю, что нет исправления "все в одном", но это для текстового файла на английском языке (США), и поэтому мне интересно, есть ли что-то, что смягчает то, что должно быть относительно распространенной проблемой при форматировании английского текста,

Например, в текстовом файле у меня есть такая запись:

0-8­23

Этот дефис - буквально дефис, как я его напечатал.В этом файле это выглядит как дефис (n-тире?), Но при копировании и вставке его ... например, в это текстовое поле браузера, оно не отображается.

Распечатка с помощью сценария Ruby дает следующее:

08�23

Как мне заставить мой сценарий преобразовать его в тире.Или что-то кроме гремлина?

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Очень часто встречаются дефисные символы и тире , особенно при выводе текстовых процессоров. Их преобразование не слишком сложно, если вы знаете, что такое байт, представляющий символ, но становится проблемой, когда вы получаете документ с несколькими различными. Ситуация ухудшается, когда вы бросаете в микс других акцентированных персонажей.

Ruby 1.8 не поддерживает многобайтовые и Unicode-наборы символов, а также 1.9+, но вы можете обойти это несколько используя библиотеку Iconv .

Iconv позволяет вам конвертировать различные наборы символов, такие как US-ASCII, ISO-8859-1 и WIN-1252. Это умнее, чем регулярное выражение, потому что он знает, как преобразовать из акцентированных символов в символы одинакового вида, или игнорировать их, если ничего подобного не существует, что позволяет изящно ухудшать вашу транслитерацию.

У меня есть пример кода в ответе на связанный вопрос. Также прочитайте статью Джеймса Грея, связанную в ответе. Он объясняет проблему и способы ее устранения, а также рекомендует Iconv.

0 голосов
/ 09 января 2011

Вы можете добавить в белый список gsub:

string.gsub(/[^a-zA-Z0-9]/)

Не зная дополнительной информации, я не могу создать для вас идеальное регулярное выражение, но общая идея состоит в том, чтобы заменить все, что не соответствует вашим ожиданиям (ничего, кроме буквы, цифры или ожидаемых символов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...