Exibição ñ em um aplicativo C # .NET

votos
1

Eu tenho um problema de localização.

Um dos meus colegas de trabalho diligentes substituiu todas as cordas em toda a nossa aplicação com constantes que estão contidas em um dicionário. Isso dicionário recebe várias cordas colocadas nele uma vez que o usuário seleciona um idioma (Inglês, por padrão, mas as línguas-alvo são Alemão, Espanhol, Francês, Português, Mandarim e tailandês).

Para o nosso teste desta funcionalidade, queríamos mudar um botão para incluir texto que tem um personagem N, que aparece tanto em espanhol e no tipo de letra Arial Unicode MS (que estamos usando toda a aplicação).

O problema é que o ñ está aparecendo como um bloco quadrado, como se o programa não sabia como para exibi-lo. Quando eu depurar em que determinada seqüência a ser lido a partir do disco, o depurador relata que o personagem como um bloco quadrado também.

Então, onde está a falha? Eu acho que poderia ser em alguns lugares:

1) Bloco de notas podem não ser unicode ciente, de modo que o ñ exibido não é o mesmo que vs2008 espera, e assim o programa interpreta o personagem como um quadrado (EDIT: Bloco de notas mostra os mesmos caracteres que vs, ou seja, ambos mostram a ±. no mesmo local.).

2) VS2008 não pode lidar com ±. Acho isso muito, muito difícil de acreditar.

3) O texto é lido corretamente, mas a fonte padrão para vs2008 não pode exibi-lo, razão pela qual o depurador mostra um quadrado.

4) O texto não é lido corretamente, e eu deveria usar algo diferente de um StreamReader regular para obter strings.

5) O texto é lido corretamente, mas a classe String padrão no C # não controla bem ñ. Acho isso muito, muito difícil de acreditar.

6) A versão de Arial Unicode MS tenho não tem ±, apesar de ser listado como um dos 50k caracteres por http://www.fileinfo.info .

Qualquer outra coisa que eu poderia ter deixado de fora?

Obrigado por qualquer ajuda!

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


7 respostas

votos
3

Eu diria que certamente Notepad é o culpado. O bloco de notas não lidar bem com caracteres Unicode. Se você quiser entregar editar este arquivo, use algo como Notepad ++ que pode lidar com unicode, e certifique-se de salvar o arquivo como UTF-8. Você provavelmente só pode usar VS para editar o arquivo, e simplesmente esquecer o bloco de notas ou Notepad ++ completamente. Studio .NET e Visual são actaully muito bom para lidar com caracteres acentuados. Todas as cordas são UTF-8 por padrão, então o problema certamente está com o bloco de notas.

Respondeu 10/01/2009 em 03:25
fonte usuário

votos
1

Eu tenho um muito curto guia para depurar problemas Unicode . É voltado para buscar texto de bancos de dados, mas os mesmos princípios se aplicam em geral.

O ponto de partida mais importante IMO é saber o que está realmente em sua seqüência, quando isso só mostra uma caixa. Despejar o conteúdo para o console, com um código como este:

static void DumpString (string value)
{
    foreach (char c in value)
    {
        Console.Write ("{0:x4} ", (int)c);
    }
    Console.WriteLine();
}    

Em seguida, procure o personagem nos gráficos de código no unicode.org . Eu suspeito que você quer U + 00F1, mas pode haver outro personagem semelhante com um ponto de código diferente - eu tenho sido enganado por isso antes.

Respondeu 10/01/2009 em 08:31
fonte usuário

votos
1

Como você está lendo as cordas?

Você já tentou ler o arquivo de texto como este (com a codificação em conjunto para UTF8):

using(StreamReader sr = new StreamReader(File.Open("file.txt", FileMode.Open), Encoding.UTF8))
{
// add your string to dictionary
}
Respondeu 10/01/2009 em 04:33
fonte usuário

votos
0

Para ler caracteres corretamente da Espanha (N, A, E, etc) você pode tentar o Codepage 1252 para a codificação.

Respondeu 31/05/2010 em 23:24
fonte usuário

votos
0

Você verificou que a sua fonte de arquivo de codificação é realmente utf-8? Não pode ser aplicável a instalação padrão vs2008 mas IDE pode detectar o seu OS' localidade padrão (ou codificação de sistema de arquivos) e definir a correspondência não-UTF-8 para todos os seus arquivos. Você pode querer experimentar com a bagunça duplamente codificado (que muitas vezes você se deparar na web) "Ã ±" sem mudar nada na sua configuração para testar suas incompatibilidades de codificação.

Tenho mordido por essa coisa quando eu começar a trabalhar em um colega de trabalho deus-sabe-o-que-editor-que-codificação de código.

Eu estou muito certo e assumir todas as suas chamadas de API são utf-8 ciente assim todo o seu texto é interpretado como utf-8, mesmo que não é.

Respondeu 10/01/2009 em 14:51
fonte usuário

votos
0

Você já tentou usar String.Format ao atribuir a propriedade button.Text, e fornecendo o IFormatProvider adequada com um objeto CultureInfo espanhol?

Eu não sei se isso teria um efeito, mas poderia ajudar.

Respondeu 10/01/2009 em 03:26
fonte usuário

votos
0

Eu estava tendo um problema semelhante no outro dia - veja os caracteres Unicode não mostrando em System.Windows.Forms.TextBox . Eu era capaz de corrigir alterando uma caixa de texto para um RichTextBox.

Respondeu 10/01/2009 em 03:24
fonte usuário

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