NET: Como posso saber se uma codificação suporta todos os caracteres em minha cadeia de caracteres?

votos
3

Eu tenho um monte de texto que eu preciso de saída, que inclui todos os tipos de caracteres de vários idiomas. Às vezes eu preciso para a saída do texto em que não sejam Unicode codificação de caracteres (por exemplo, Shift-JIS ou ISO-8859-2), a fim de coincidir com a página que vai.

Se o texto tem caracteres que a codificação não pode lidar com (por exemplo, caracteres japoneses na norma ISO-8859-2 codificado saída) acabo com caracteres estranhos na saída. Eu posso escapar deles, mas prefiro fazer isso só se for realmente necessário.

Existe uma maneira que eu posso dizer de antemão se uma codificação pode lidar com todos os personagens na minha string: Então, minha pergunta é essa?

EDIT: Eu acho que o EncoderFallback é provavelmente a resposta certa para a pergunta que fiz. Infelizmente, não parece funcionar na minha situação particular. Meu pensamento era converter os caracteres para seus equivalentes HTML entidade (por exemplo, & # 12514; em vez de モ). No entanto, o codificador converte apenas o primeiro tal caráter que encontra, e se eu definir o Response.ContentEncoding nunca chama meu EncoderFallback em tudo.

Publicado 10/03/2009 em 18:26
fonte usuário
Em outras línguas...                            


4 respostas

votos
5

Você pode escrever sua própria classe EncoderFallback atribuir isso ao codificador antes da codificação.

Usando essa abordagem, você não precisa fazer nada em avançado (que provavelmente seria simplesmente processar a cadeia de saída à procura de problemas).

Em vez sua classe Fallback só precisa lidar com substituições onde a codificação não tem um valor para um personagem.

Respondeu 10/03/2009 em 18:36
fonte usuário

votos
3

Tente codificar a corda com uma codificação cuja EncoderFallback está definido para EncoderExceptionFallback . por exemplo.:

Encoding e= Encoding.GetEncoding(932, new EncoderExceptionFallback(), new DecoderExceptionFallback());

Em seguida, pegar EncoderFallbackException quando você GetBytes ().

Respondeu 10/03/2009 em 18:40
fonte usuário

votos
0

Eu acho que os métodos já deve funcionar. (A solução EncoderFallback parece bastante agradável.) Aqui está uma alternativa no entanto, no caso de você preferir.

Criar um codificador para a codificação que pretende testar chamando encoding.GetEncoder (). Você pode então chamar o método Convert do objeto Encoder, passando em seu texto, e olhando para o valor do concluída parâmetro para determinar se ele conseguiu ou não.

Se a velocidade é um problema, você pode querer referência os vários métodos, mas eu suspeito que todos teriam perfis de desempenho bastante semelhantes.

Respondeu 10/03/2009 em 18:45
fonte usuário

votos
0

Convertê-lo para a codificação alvo, convertê-lo de volta e compará-lo com o original?

Tente Encoding.GetBytes () e Encoding.GetStrings () para converter, por conseguinte, e para a frente.

Como uma otimização você pode pesquisar todos os caracteres Unicode utilizados a partir de sua seqüência original e apenas usar isso para experimentar a codificação.

Respondeu 10/03/2009 em 18:35
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more