Одна вещь, которая преследует меня во время работы здесь, — это моджибаке, тот странный текст, который вы иногда видите плавающим в документе Word.

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

Но Япония с ее разными кодировками, некоторыми устаревшими, некоторыми новыми, делает это совсем другим вызовом (ujis, sjis, cp932, eucjpms). Просто невозможно узнать, что будет использовать человек на другом конце документа. Или как настроено его/ее программное обеспечение (у ВАС?).

Конечно, UTF-8 обеспечивает хороший и безопасный способ справиться с этим. За исключением случаев, когда другие кодировки ползут где-то посередине.

Кодирование в сетевом стеке

Эта история вдохновлена ​​несколькими часами, которые я провел сегодня, пытаясь разобраться с тяжелым случаем моджибаке.

Именно этот: Shopify㠨㠯(テスト1)

Немного предыстории: я создаю базовую библиотеку AB Testing и панель инструментов, используя страницу Shopify в качестве MVP, используя сочетание AJAX, PHP, AWS/RDS и R (+ немного Python) для панели инструментов, и, как говорится: все работает нормально на моей машине.

Когда я переключился на официальную тестовую среду, внезапно появился этот моджибаке. Мое обычное решение в этом случае — убедиться, что все страницы и скрипты правильно объявлены как использующие кодировку UTF-8.

Но этого было недостаточно.

Разумеется, база данных была настроена на латинскую кодировку. Исправлено. Все равно перепутал.

Из того, что я почерпнул из StackOverflow, где-то в настройках PHP есть кодировка для общения с базами данных. Не удалось найти.

Итак, наконец, прибегли к urlencode всего в Javascript и сохранению результатов как есть в БД. Не красиво, но работает. По крайней мере один раз я регулировал длину полей SQL.

Худшие случаи моджибаке для меня — это электронные письма на японском языке, отправленные с помощью PHP. Так много возможностей для моджибаке и риск того, что электронное письмо будет помечено как спам… К счастью, сегодня было легко