Outras mensagens com charset não UTF-8, ou seja, iso-8859-1, são importadas corretamente.
Antes de tentar descobrir a raiz do problema explorando o código-fonte começando por script/import_scripts/mbox/support/indexer.rb, alguém tem alguma ideia? Poderia ser algo ambiental e não no código-base? Isso também acontece quando um usuário no modo de lista de e-mails envia uma resposta com essa codificação?
Fiz um teste rápido e Email::Receiver parece funcionar bem. Ele converte a entrada para UTF-8. Não consigo pensar em nenhuma razão pela qual a codificação estaria errada depois.
[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\) ?
Obrigado pelo teste rápido: eu não saberia como fazer isso sozinho Será que algo está faltando no contêiner de importação? Eu gostaria muito de reproduzir o que você fez e explorar a partir daí. Se eu não encontrar nada, fornecerei instruções para reproduzir o problema usando o procedimento de importação mbox com uma caixa de entrada contendo apenas este único e-mail.
Eu obtenho os mesmos resultados que você, então o problema não está aí. Vou executar uma importação com apenas este e-mail e uma nova categoria para verificar se isso não é algum efeito colateral.
Aqui está o que fiz, em uma instalação da versão 2.5.4:
shared/standalone/import/settings.yml sem modificações
Removi shared/standalone/import/data/index.db da importação anterior
Alterei o cabeçalho Message-ID:
Copiei windows.txt para shared/standalone/import/data/windows4/windows.mbox
Executei ./launcher enter import
Executei a importação com:
root@forum:/var/www/discourse# import_mbox.sh
A importação do mbox está iniciando...
Carregando grupos existentes...
Carregando usuários existentes...
Carregando categorias existentes...
Carregando posts existentes...
Carregando tópicos existentes...
Criando índice
Indexando arquivos em /shared/import/data/windows4
Indexando /shared/import/data/windows4/windows.mbox
Indexando respostas e usuários
Criando categorias
1 / 1 (100.0%) [8121278 itens/min]
Criando usuários
Ignorando 1 usuário já importado
Criando tópicos e posts
1 / 1 (100.0%) [219 itens/min]
Atualizando status do tópico
Atualizando bumped_at nos tópicos
Atualizando last posted at nos usuários
Atualizando last seen at nos usuários
Atualizando first_post_created_at...
Atualizando post_count do usuário...
Atualizando topic_count do usuário...
Atualizando usuários do tópico
Atualizando tempos dos posts
Atualizando usuários de tópicos em destaque
Atualizando tópicos em destaque nas categorias
9 / 9 (100.0%) [1562 itens/min] ]
Reiniciando contadores de tópicos
Concluído (00h 00min 09s)
Obtive o mesmo resultado que acima, que você pode ver aqui.
Ou a diferença está na forma como a mensagem é extraída do arquivo mbox: é aqui que o caminho do código difere. O raw_email = File.read("/tmp/windows.mbox") acima é diferente de dividir o arquivo com expressões regulares, e talvez seja aí que as coisas deem errado.
E de fato, adicionar File.open('/tmp/message.txt', 'w') { |file| file.write(receiver.raw_email) } após esta linha produz o seguinte arquivo, que é diferente do arquivo original.
Desculpe se for uma pergunta de iniciante, mas não estou familiarizado com a base de código Você tem alguma sugestão sobre onde uma mudança desse tipo seria benéfica?
Depois de identificar onde ocorre a transformação indesejada, parece ser aqui:
O line.scrub é responsável por transformar o conteúdo em algo diferente do original. Se removido, a expressão regular falha com:
...
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)
Isso ocorre porque o conteúdo não é UTF-8, de fato
Alguma ideia de como isso deve ser resolvido? Talvez uma primeira passagem apenas nos cabeçalhos do e-mail, procurando pelo charset? Parece haver um problema de e aqui.