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

У меня есть веб-приложение с ruby ​​на рельсах.С:Рубин: рубин 1.9.2p290Рельсы: рельсы (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_84. Я также попытался ввести encoding: utf8 в database.yml, данные могут быть сохранены, но это стало вопросительным знаком ??в таблице базы данных, и когда я хочу просмотреть его, он также сказал «недопустимая последовательность байтов в UTF-8».

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

1 Ответ

0 голосов
/ 22 апреля 2019

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

Я попробовал и перезагрузил компьютер. и мое приложение может снова сохранить "✓" или китайский символ. Сохранено стало закодированной строкой в ​​базе данных.
(Я до сих пор ищу причину, почему Windows Unicode является корнем этой проблемы)

...