Jadi apa masalahnya,
Ini adalah karakter ’
( RIGHT SINGLE QUOTATION MARK
- U + 2019) yang sedang diterjemahkan sebagai CP-1252 bukan UTF-8 . Jika Anda memeriksa tabel penyandian , maka Anda melihat bahwa karakter ini di UTF-8 terdiri dari byte 0xE2
, 0x80
dan 0x99
. Jika Anda memeriksa tata letak halaman kode CP-1252 , maka Anda akan melihat bahwa masing-masing byte tersebut mewakili karakter individu â
, €
dan ™
.
dan bagaimana cara memperbaikinya?
Gunakan UTF-8, bukan CP-1252 untuk membaca, menulis, menyimpan, dan menampilkan karakter.
Saya memiliki Tipe Konten yang disetel ke UTF-8 di <head>
tag dan header HTTP saya:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Ini hanya menginstruksikan klien yang encoding yang akan digunakan untuk menafsirkan dan menampilkan karakter. Ini tidak menginstruksikan program Anda sendiri yang menggunakan pengkodean untuk membaca, menulis, menyimpan, dan menampilkan karakter. Jawaban yang tepat tergantung pada platform sisi server / database / bahasa pemrograman yang digunakan. Perhatikan bahwa satu set di header respons HTTP lebih diutamakan daripada tag meta HTML. Tag meta HTML hanya akan digunakan ketika halaman dibuka dari sistem file disk lokal alih-alih dari HTTP.
Selain itu, browser saya disetel ke Unicode (UTF-8)
:
Ini hanya memaksa klien yang menggunakan pengkodean untuk menafsirkan dan menampilkan karakter. Tetapi masalah sebenarnya adalah bahwa Anda sudah mengirim ’
(dikodekan dalam UTF-8) ke klien, bukan ’
. Klien menampilkan dengan benar ’
menggunakan pengkodean UTF-8. Jika klien salah kaprah untuk menggunakan, misalnya ISO-8859-1, Anda mungkin akan melihatnya ââ¬â¢
.
Saya menggunakan ASP.NET 2.0 dengan database.
Ini kemungkinan besar di mana masalah Anda berada. Anda perlu memverifikasi dengan alat basis data independen seperti apa data itu.
Jika ’
karakter ada di sana, maka Anda tidak terhubung ke database dengan benar. Anda harus memberi tahu konektor basis data untuk menggunakan UTF-8.
Jika basis data Anda berisi ’
, maka basis data Andalah yang kacau. Kemungkinan besar tabel tidak dikonfigurasi untuk digunakan UTF-8
. Sebagai gantinya, mereka menggunakan pengkodean default database, yang bervariasi tergantung pada konfigurasi. Jika ini adalah masalah Anda, maka biasanya hanya mengubah tabel untuk menggunakan UTF-8 sudah cukup. Jika database Anda tidak mendukung itu, Anda harus membuat ulang tabel. Ini adalah praktik yang baik untuk mengatur penyandian tabel saat Anda membuatnya.
Anda kemungkinan besar menggunakan SQL Server, tetapi di sini ada beberapa kode MySQL (disalin dari artikel ini ):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
Namun jika meja Anda sudah UTF-8, maka Anda perlu mengambil langkah mundur. Siapa atau apa yang menaruh data di sana. Di situlah masalahnya. Salah satu contohnya adalah nilai-nilai formulir HTML yang dikirimkan yang salah dikodekan / didekodekan.
Berikut ini beberapa tautan untuk mempelajari lebih lanjut tentang masalahnya: