Posso ver cinco áreas potenciais para problemas:
-
Como você está realmente colocando o texto em seu aplicativo .NET? Se estiver codificado em um literal de string, você tem certeza de que o compilador está assumindo a codificação correta para seu arquivo de origem?
-
Pode haver um problema em como você está enviando para o banco de dados.
-
Pode haver um problema com a forma como ele está sendo armazenado no banco de dados.
-
Pode haver um problema com a forma como você está buscando no banco de dados.
-
Pode haver um problema com a forma como você está exibindo-o novamente depois.
Agora as áreas 2-4 parecem ser menos prováveis de serem um problema do que 1 e 5. Como você está exibindo o texto depois? Você está realmente buscando-o no banco de dados em .NET ou está usando o Toad ou algo semelhante para tentar vê-lo?
Se você estiver escrevendo novamente a partir do .NET, sugiro que ignore o banco de dados completamente - se você apenas exibir a string em si, o que você verá?
Eu tenho um artigo que você pode achar útil na depuração de problemas de Unicode. Em particular, concentre-se em todos os lugares onde a codificação poderia estar dando errado, e certifique-se de que sempre que você "exibir" uma string, você despeja os caracteres Unicode exatos (como números inteiros) para que você possa verificar isso em vez de apenas o que sua fonte atual deseja exibir.
EDIT:Ok, então o banco de dados é envolvido em algum lugar no problema.
Eu fortemente sugiro que você remova qualquer coisa como ASP e HTML da equação. Escreva um aplicativo de console simples que não faz nada mas insira a string e busque-a novamente. Faça com que ele despeje os caracteres Unicode individuais (como números inteiros) antes e depois. Em seguida, tente ver o que está no banco de dados (por exemplo, usando o Toad). Eu não conheço as funções do Oracle para converter strings em sequências de caracteres Unicode individuais e depois converter esses caracteres em inteiros, mas essa seria a próxima coisa que eu tentaria.
EDIT:Mais duas sugestões (bom ver o aplicativo do console, btw).
-
Especifique o tipo de dados para o parâmetro, em vez de apenas fornecer um objeto. Por exemplo:
command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;
-
Considere usar o próprio driver da Oracle em vez daquele embutido no .NET. Você pode querer fazer isso de qualquer maneira, pois geralmente é considerado mais rápido e confiável, acredito.