Problema de codificação de caracteres ao importar banco de dados MyBB

Olá, tenho uma série de posts e até mesmo nomes de usuários importados de um fórum MyBB que estão exibindo caracteres aleatórios como ’ e Â.

Pelo que pude inferir de relatos de comportamento semelhante no WordPress, isso pode ser um problema de codificação entre Latin1 e UTF-8?

Existe uma maneira fácil de removê-los após a importação?

A quais caracteres esses símbolos realmente se referem? Não consigo pensar em quais caracteres originais eles podem ter substituído.

Além disso, vejo que alguns posts importados contêm uma série de MyCode não analisado — existe alguma maneira de que isso seja analisado no Discourse?

Sim. Essa é a minha suposição. Estou trabalhando agora com uma importação com problemas semelhantes. A maioria deles envolve coisas como aspas curvas e travessões longos.

Está longe de ser fácil, mas é possível fazer algum processamento posterior que aplique um force_encoding ou tente substituir os caracteres um por um.

Algo como:

Post.all.each do |post|
  post.raw = post.raw.force_encoding('utf-8').encode("Windows-1252").force_encoding('utf-8')
  post.save!
  post.rebake!
end

Mas recomendo testar extensivamente em um ambiente de staging antes de executar isso nos seus dados em produção.

Obrigado, Jay.

Existe alguma maneira inteligente de resolver o problema na origem — ou seja, reexportar o banco de dados do fórum antigo e depois reimportá-lo livre de problemas com caracteres e mycode?

Se você ainda não foi ao vivo, de modo que recomeçar não seja uma opção, essa é a melhor maneira de fazer isso.

O site ainda não está oficialmente no ar, mas qual é a melhor maneira de lidar com problemas de caracteres e a análise de mycode ao exportar do MyBB?

Exportar todos os dados em UTF-8, se possível, resolverá esses problemas.

Voltei à instalação original do MyBB e encontrei, no painel de administração/Ferramentas e Manutenção/Saúde do Sistema, um aviso:

Recomenda-se não usar codificações diferentes no seu banco de dados. Isso pode causar comportamentos inesperados ou erros do MySQL.

As tabelas são listadas, e pude ver que a maioria, mas não todas, estavam no formato UTF-8. Parecia que algumas, particularmente associadas a plugins, estavam em um formato mais antigo.

Clicar no link ‘Converter tudo’ exibiu a resposta de que o arquivo /inc/config.php precisava ser editado para suportar o UTF-8 completo de 4 bytes:

$config[‘database’][‘encoding’] = ‘utf8mb4’;

Após editar o config.php e tentar a conversão novamente, agora todas aparecem como compatíveis. Vou tentar reimportar para o Discourse e retornarei com um relato se isso ajudar com os problemas de caracteres.

Ainda não tenho certeza sobre como lidar com a análise do MyCode.

Você não incluiu nenhum exemplo ou detalhe sobre isso — neste momento, pode ser melhor abrir um novo tópico e manter este focado no acompanhamento sobre a codificação de caracteres.

Olá, um novo tópico com um exemplo está aqui