Ошибка: несовместимые кодировки символов: ASCII-8BIT и UTF-8 и недопустимая последовательность байтов в UTF-8 при создании записи RoR в SQL Server 2008 R2

Я создал веб-приложение с рубином на рельсах. С:

Ruby: ruby ​​1.9.2p290
Rails: rails (3.0.7)
База данных: SQL Server 2008 R2

Я тестировал это в моем локальном компьютере с вводом традиционного китайского символа в поле ввода/текстовое поле и создание данных. это работает нормально.
Данные: 長壽
Результат в таблице SQL Server с использованием varchar(255) SQL_Latin1_General_CP1_CI_AS: 長壽

При этом я также могу просматривать текст в пользовательском интерфейсе.

Но когда я дал приложение, рубиновый драгоценный камень и предпочтения своим друзьям, они не могут ввести китайский традиционный иероглиф. он сказал "incompatible character encodings: ASCII-8BIT and UTF-8" при нажатии кнопки "Сохранить".
Даже я восстанавливаю в них свою базу данных, веб-приложение не может правильно отобразить значение, оно сказало "invalid byte sequence in UTF-8". Хотя они также используют те же настройки, что и мои, например SQL Server, версию ruby ​​​​и путь.
Разница только в том, что я использую английскую версию Windows 10, а мои друзья используют китайскую версию Windows 10.

Я попробовал:
1. config.encoding = "utf-8" уже находится в файле application.rb.
2. Поместите # encoding: utf-8 поверх модели и контроллера
3. Над строкой Rails.application.initialize! в файле environment.rb добавьте следующие две строки:
--Encoding.default_external = Encoding::UTF_8
--Encoding.default_internal = Encoding::UTF_8
4. Я также попробовал ввести encoding: utf8 в database.yml, данные могут быть сохранены, но они становятся вопросительными?? в базе данных таблицы, и когда я хочу ее просмотреть, он также сказал «недопустимая последовательность байтов в UTF-8».


Любая дополнительная информация, я могу дать ее вам, если это необходимо. :)


person AdhiFoo    schedule 20.04.2019    source источник
comment
Просто к сведению, SQL Server в настоящее время не поддерживает UTF-8 ни в одной из выпущенных версий. Единственная версия, которая это делает, — это SQL Server 2019; который в настоящее время находится в предварительной версии и будет выпущен в конце этого года.   -  person Larnu    schedule 20.04.2019


Ответы (1)


После долгих исследований я обнаружил, что проблема заключается в кодировке Windows.
Я освободил, что не могу ввести символ, такой как "✓". Он возвращает ту же ошибку. А потом я попытался проследить, какой ввод в SQL-профилировщике будет передаваться в таблицу базы данных, он же "✓". Но он должен быть закодирован как «✓» (я также проверил значение в своем локальном).
После долгих исследований и гугления я нашел этот пост https://superuser.com/questions/336197/unicode-characters-suddenly-start-displaying-as-boxes-in-некоторые-приложения?newreg=8b561b87000d4e79b20cbea9c3d2eb07 />

Я попробовал и перезагрузил ПК. и мое приложение может снова сохранить «✓» или китайский иероглиф. Он сохранил закодированную строку в базу данных.
(я все еще ищу причину, почему юникод Windows является корнем этой проблемы)

person AdhiFoo    schedule 22.04.2019