Saya memiliki string yang saya terima dari aplikasi pihak ketiga dan saya ingin menampilkannya dengan benar dalam bahasa apa pun menggunakan C # di Windows Surface saya.
Karena penyandian yang salah, seutas string saya terlihat seperti ini dalam bahasa Spanyol:
Acción
padahal seharusnya terlihat seperti ini:
Acción
Menurut jawaban pada pertanyaan ini: Bagaimana cara mengetahui pengkodean string dalam C # , pengkodean yang saya terima seharusnya sudah datang pada UTF-8, tetapi dibaca pada Pengkodean. Kerusakan (mungkin ANSI?).
Saya mencoba untuk mengubah string ini menjadi UTF-8 nyata, tetapi salah satu masalah adalah bahwa saya hanya bisa melihat subset dari kelas Encoding (properti UTF8 dan Unicode saja), mungkin karena saya terbatas pada permukaan jendela API.
Saya telah mencoba beberapa cuplikan yang saya temukan di internet, tetapi sejauh ini belum ada yang terbukti berhasil untuk bahasa timur (yaitu bahasa Korea). Salah satu contohnya adalah sebagai berikut:
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);
Saya juga mencoba mengekstraksi string ke array byte dan kemudian menggunakan UTF8.GetString:
byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
char ch = myString[ix];
myByteArray[ix] = (byte) ch;
}
myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);
Apakah kalian punya ide lain yang bisa saya coba?
Encoding.Default
mengembalikan kode situs ANSI.Jawaban:
Seperti yang Anda ketahui, string masuk karena
Encoding.Default
Anda bisa menggunakan:Hal lain yang mungkin harus Anda ingat: Jika Anda menggunakan Console.WriteLine untuk menampilkan beberapa string, maka Anda juga harus menulis
Console.OutputEncoding = System.Text.Encoding.UTF8;
!!! Atau semua string utf8 akan di-output sebagai gbk ...sumber
Encoding.GetEncoding(...)
; Anda harus menemukan nama penyandian aktual yang salah digunakan di ujung lainnya.myString
adalah mojibake. Pertama-tama kode membatalkan decoding yang salah kemudian melakukan decoding yang benar. Ini berfungsi selama decoding yang salah tidak kehilangan data. Tetapi seperti yang ditunjukkan oleh @SLaks, akan lebih baik untuk menggunakan penyandian yang salah. (Nama dan komentar yang lebih baik dalam kode akan membantu memahami bagaimana kode yang kelihatannya salah sebenarnya merupakan upaya melakukan yang benar.)Output akan terlihat seperti
panggil DecodeFromUtf8 ();
sumber
Kode Anda membaca urutan byte yang dikodekan oleh UTF8, dan mendekodekannya menggunakan pengkodean 8-bit.
Anda perlu memperbaiki kode itu untuk mendekode byte sebagai UTF8.
Atau ( tidak ideal ), Anda dapat mengonversi string buruk kembali ke array byte asli — dengan mengkodekannya menggunakan pengkodean yang salah — kemudian mendekode ulang byte sebagai UTF8.
sumber
sumber
Jika Anda ingin menyimpan string ke database mysql, lakukan ini: ->
Struktur bidang basis data Anda di phpmyadmin [atau panel kontrol lain] harus disetel ke utf8-gerneral-ci
2) Anda harus mengubah string Anda [Kel. textbox1.text] ke byte, karenanya
2-1) define byte [] st2;
2-2) konversi string Anda [textbox1.text] menjadi unicode [mmultibyte string] oleh:
3) jalankan perintah sql ini sebelum permintaan:
3-2) sekarang Anda harus memasukkan nilai ini ke misalnya bidang nama dengan:
4) pekerjaan utama yang tidak diperhatikan oleh banyak solusi adalah baris di bawah ini: Anda harus menggunakan addwithvalue alih-alih menambahkan parameter perintah seperti di bawah ini:
+++++++++++++++++++++++++++++++++ menikmati data nyata di server database Anda, bukan ????
sumber
Gunakan cuplikan kode di bawah ini untuk mendapatkan byte dari file csv
Panggil di bawah ini dan simpan sebagai lampiran
sumber