Duas codificações usadas na cadeia de RTF não exibirá correto em RichTextBox?
-
20-08-2019 - |
Pergunta
Eu estou tentando analisar alguns RTF, que eu voltar a partir do servidor. Para a maioria de texto eu voltar esta multa funciona (e usando um controle RichTextBox irá fazer o trabalho), no entanto alguns dos RTF parece conter um adicional de "codificação" e alguns dos personagens corrompidos.
A string original é a seguinte (e contém alguns dos caracteres usados ??em polonês):
ąćęłńóśźż
A cadeia de RTF com caracteres hexadecimais codificado que é enviar olha para trás como este
{\lang1045\langfe1045\f16383 {\'b9\'e6\'ea\'b3{\f7 \'a8\'bd\'a8\'ae}\'9c\'9f\'bf}}
Estou tendo problemas decodificar o NÃO caracteres na string retornada, eles parecem estar representado por dois hex valoriza cada, enquanto o restante da cadeia é representada (como esperado) por valores hexadecimais individuais .
Usando um controle RichTextBox para "parse" os resultados RTF em texto corruptor (os dois personagens em questão são exibidos como quatro diferentes personagens indesejados).
Se eu iria codificar a string plain-me a hex usando o código esperado (1250, Latin 2, a página de códigos ANSI para lcid 1045) gostaria de obter o seguinte:
\'B9\'E6\'EA\'B3\'F1\'F3\'9C\'9F\'BF
Estou perdido a respeito de como eu pode decodificar corretamente o {\ f7 \ 'a8 \' bd \ 'a8 \' ae} parte da cadeia de caracteres retornada que deve corresponder a NÃO .
Note que não há nenhuma definição de fonte para \ f7 no cabeçalho RTF ea cadeia parece bem quando visto directamente sobre o significado servidor que os caracteres (se eles estão corrompidos) estão em algum lugar corrompido no conversão antes de enviar.
Não estou certo se o problema está no lado do servidor (como eu não tenho controle sobre isso), mas uma vez que o servidor é usado para um monte de trabalho de tradução i assumir que a string retornada é ok.
Eu fui passando as especificações RTF mas não consegue encontrar qualquer dica sobre este tipo de combinação de codificações.
Solução
Eu não sei por que isso está acontecendo, mas o parece de codificação para ser GBK ( ou algo suficientemente semelhantes).
Talvez as tentativas servidor para fazer alguma correspondência "inteligente" para encontrar os personagens, ou codificação de caracteres padrão do servidor é GBK ou assim, e esses personagens (e somente aqueles) também ocorrem em GBK por isso prefere que.
Eu descobri, adicionando os códigos ofender sextavadas (A8 BD A8 AE
) como bytes em um arquivo HTML simples, para que eu pudesse passar por codificações do meu navegador e ver se alguma coisa combinado:
<html><body>¨½¨®</body></html>
Para minha surpresa, meu navegador veio com "não" imediatamente.