Символ является частью наборов символов ISO-8859-1 и Win-1252, среди которых другие . Второй, вероятно, самый популярный набор символов для Windows и ваш наиболее вероятный источник.
RUBY_VERSION # => "1.9.2"
Это моя версия Ruby, в которой выполняются следующие тесты. Обратите внимание, что в следующих примерах строки # encoding
не являются комментариями, они представляют собой директивы для Ruby, для которых используется набор символов при обнаружении незакодированных двоичных символов:
# encoding: Windows-1252
RUBY_VERSION # => "1.9.2"
asdf = "\xe9"
asdf.encoding # => #<Encoding:Windows-1252>
asdf.encode('UTF-8') # => "é"
asdf.encode('UTF-8').encoding # => #<Encoding:UTF-8>
Показывает символ в ISO-8859-1:
# encoding: ISO-8859-1
RUBY_VERSION # => "1.9.2"
asdf = "\xe9"
asdf.encoding # => #<Encoding:ISO-8859-1>
asdf.encode('UTF-8') # => "é"
asdf.encode('UTF-8').encoding # => #<Encoding:UTF-8>
Джеймс Грей сделал серию статей пару лет назад о работе с этим материалом. Это хорошее чтение.
Теперь вернемся к попытке выяснить, в каком наборе символов может находиться символ: если у вас есть только один символ, поскольку он может быть в нескольких наборах одновременно, трудно определить, какой это набор. Если у вас есть больше символов> = "\ x80", вы можете запустить поддержку наборов символов iconv
и попытаться преобразовать их. Это грязно, но я должен был сделать это в Perl из-за скрипа около пяти лет назад. Альтернативой является использование кода Python chardet
.
В статьях Джеймса Грея есть ссылка на статью, в которой рекомендуется rchardet
.
В вышеприведенных процедурах упоминаются детекторы кодировки Mozilla, которые дадут вам больше информации о том, как с этим справиться.