Другие сообщения с кодировкой, отличной от UTF-8, например iso-8859-1, импортируются корректно.
Прежде чем я попробую найти корень проблемы, изучив исходный код начиная с script/import_scripts/mbox/support/indexer.rb, есть ли у кого-нибудь идеи? Может ли это быть связано с окружением, а не с кодом? Происходит ли это также, когда пользователь в режиме рассылки отправляет ответ с такой кодировкой?
Я провёл быструю проверку, и Email::Receiver работает корректно. Он преобразует входные данные в UTF-8. Не могу придумать причины, по которой кодировка могла бы стать неверной впоследствии.
[1] pry(main)> raw_email = File.read("/tmp/windows.txt");
[2] pry(main)> receiver = Email::Receiver.new(raw_email, convert_plaintext: true, skip_trimming: false);
[3] pry(main)> body = receiver.select_body;
[4] pry(main)> receiver.mail.charset
=> "windows-1252"
[5] pry(main)> body.first.encoding
=> #<Encoding:UTF-8>
[6] pry(main)> puts body.first;
cette réflexion me fait penser : y-a-il une obligation/raison (en dehors du coup de maintenannce) à avoir un même outil pour les 2 fonctionnalités (interactions vs galerie) ?
Спасибо за быстрый тест: я бы не знал, как сделать это сам Не могло ли случиться так, что в контейнере импорта чего-то не хватает? Мне очень хотелось бы воспроизвести то, что вы сделали, и продолжить исследование оттуда. Если я ничего не найду, я предоставлю инструкции по воспроизведению проблемы, используя процедуру импорта mbox с ящиком входящих, содержащим только это одно письмо.
Я получил те же результаты, что и вы, так что проблема не в этом. Я запущу импорт только с этим адресом электронной почты и новой категорией, чтобы убедиться, что это не какой-либо побочный эффект.
удалил shared/standalone/import/data/index.db из предыдущего импорта
изменил заголовок Message-ID:
скопировал windows.txt в shared/standalone/import/data/windows4/windows.mbox
выполнил ./launcher enter import
запустил импорт с помощью:
root@forum:/var/www/discourse# import_mbox.sh
Начинается импорт mbox...
Загрузка существующих групп...
Загрузка существующих пользователей...
Загрузка существующих категорий...
Загрузка существующих постов...
Загрузка существующих тем...
Создание индекса
Индексирование файлов в /shared/import/data/windows4
Индексирование /shared/import/data/windows4/windows.mbox
Индексирование ответов и пользователей
Создание категорий
1 / 1 (100.0%) [8121278 элементов/мин]
Создание пользователей
Пропущено 1 уже импортированный пользователь
Создание тем и постов
1 / 1 (100.0%) [219 элементов/мин]
Обновление статуса тем
Обновление bumped_at в темах
Обновление last_posted_at у пользователей
Обновление last_seen_at у пользователей
Обновление first_post_created_at...
Обновление post_count у пользователей...
Обновление topic_count у пользователей...
Обновление пользователей тем
Обновление таймингов постов
Обновление пользователей избранных тем
Обновление избранных тем в категориях
9 / 9 (100.0%) [1562 элемента/мин] ]
Сброс счетчиков тем
Готово (00ч 00мин 09сек)
Получил тот же результат, что и выше, который можно увидеть здесь.
Или разница заключается в том, как сообщение извлекается из файла mbox: именно здесь отличается путь выполнения кода. Приведенная выше строка raw_email = File.read("/tmp/windows.mbox") отличается от разделения файла с помощью регулярных выражений, и, возможно, именно здесь возникает ошибка.
И действительно, добавление File.open('/tmp/message.txt', 'w') { |file| file.write(receiver.raw_email) } после этой строки приводит к созданию следующего файла, который отличается от исходного файла.
Возможно, вам потребуется добавить вызов .force_encoding после чтения файла, чтобы сообщить Ruby, какая кодировка используется в файле электронной почты.
После того как мы сузили круг поиска и выяснили, где происходит нежелательное преобразование, похоже, что проблема здесь:
Метод line.scrub отвечает за преобразование содержимого в нечто отличное от оригинала. Если его убрать, регулярное выражение завершится ошибкой:
...
1: from /var/www/discourse/script/import_scripts/mbox/support/indexer.rb:174:in `block in each_mail'
/var/www/discourse/script/import_scripts/mbox/support/indexer.rb:174:in `=~': invalid byte sequence in UTF-8 (ArgumentError)
Поскольку кодировка действительно не UTF-8
Есть ли какие-то идеи, как это решить? Возможно, стоит сделать предварительный проход только по заголовкам письма в поисках указанной кодировки? Здесь, кажется, возникает проблема и .