Проблемы кодирования с символами Microsoft Word [ UTF-8 К ISO-5589-1 ]
У меня была адская работа с контентом, который был скопирован и вставлен из Microsoft Word и передан в нашу систему.
Содержимое содержит многобайтовые символы, такие как: “ ” ’
который я хотел бы преобразовать в " " '
,
Поскольку наше приложение / база данных сконфигурировано для UTF-8, эти многобайтовые символы отправляются и сохраняются без проблем. Но когда мы передаем нашу информацию третьей стороне, которая использует ISO-8859-1, мы сталкиваемся с некоторыми проблемами кодирования.
У кого-нибудь была эта проблема? Или есть возможное решение?
1 ответ
Поскольку встроенный метод String#force_encoding преобразует многобайтовые символы в представления самих себя, а не в замены, вы не можете использовать это.
str = "“ ” ’"
str.force_encoding("ISO-8859-1")
#=> "\xE2\x80\x9C \xE2\x80\x9D \xE2\x80\x99"
Вы можете попробовать String # encode, но это может заменить только все недопустимые / неопределенные символы чем-то, а не каждый по отдельности.
str = "“ ” ’"
str.encode("ISO-8859-1", :invalid => :replace, :undef => :replace, :replace => "")
#=> " "
str = "“ ” ’ €"
str.encode("ISO-8859-1", :invalid => :replace, :undef => :replace, :replace => "'")
#=> "' ' ' '"
Скорее всего, вам нужно написать или найти библиотеку, которая поддерживает связь между многобайтовыми символами Юникода и символами ASCII, которым они соответствуют, и использовать это.