Saya dapat melihat lima area potensial untuk masalah:
-
Bagaimana sebenarnya Anda memasukkan teks ke dalam aplikasi .NET Anda? Jika hardcoded dalam string literal, apakah Anda yakin bahwa kompiler mengasumsikan penyandian yang tepat untuk file sumber Anda?
-
Mungkin ada masalah dalam cara Anda mengirimnya ke database.
-
Mungkin ada masalah dengan cara penyimpanannya di database.
-
Mungkin ada masalah dengan cara Anda mengambilnya di database.
-
Mungkin ada masalah dengan cara Anda menampilkannya lagi setelahnya.
Sekarang area 2-4 sepertinya tidak menjadi masalah daripada 1 dan 5. Bagaimana Anda menampilkan teks setelahnya? Apakah Anda benar-benar mengambilnya dari database di .NET, atau apakah Anda menggunakan Toad atau sesuatu yang serupa untuk mencoba melihatnya?
Jika Anda menulisnya lagi dari .NET, saya sarankan Anda melewatkan database sepenuhnya - jika Anda hanya menampilkan string itu sendiri, apa yang Anda lihat?
Saya memiliki artikel yang mungkin berguna untuk men-debug masalah Unicode. Khususnya, berkonsentrasilah pada setiap tempat di mana penyandian bisa terjadi kesalahan, dan pastikan bahwa setiap kali Anda "menampilkan" string, Anda membuang karakter Unicode yang tepat (sebagai bilangan bulat) sehingga Anda dapat memeriksanya, bukan hanya apa pun yang ingin ditampilkan oleh font Anda saat ini.
EDIT:Oke, jadi database adalah terlibat di suatu tempat dalam masalah.
Saya sangat menyarankan agar Anda menghapus sesuatu seperti ASP dan HTML dari persamaan. Tulis aplikasi konsol sederhana yang tidak melakukan apa-apa tetapi masukkan string dan ambil lagi. Buat itu membuang karakter Unicode individu (sebagai bilangan bulat) sebelum dan sesudah. Kemudian coba lihat apa yang ada di database (misalnya menggunakan Toad). Saya tidak tahu fungsi Oracle untuk mengubah string menjadi urutan karakter Unicode individu dan kemudian mengubah karakter tersebut menjadi bilangan bulat, tapi itu mungkin hal berikutnya yang akan saya coba.
EDIT:Dua saran lagi (baik untuk melihat aplikasi konsol, btw).
-
Tentukan tipe data untuk parameter, bukan hanya memberinya objek. Misalnya:
command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;
-
Pertimbangkan untuk menggunakan driver Oracle sendiri daripada driver bawaan .NET. Anda mungkin tetap ingin melakukannya, karena menurut saya, ini biasanya dianggap lebih cepat dan lebih andal.