แล้วปัญหาคืออะไร
มันเป็น’
( RIGHT SINGLE QUOTATION MARK
- U + 2019) ตัวละครที่จะถูกถอดรหัสเป็นCP-1252แทนUTF-8 หากคุณตรวจสอบการเข้ารหัสตารางแล้วคุณจะเห็นว่าตัวละครตัวนี้เป็น UTF-8 ประกอบด้วยไบต์0xE2
, และ0x80
0x99
หากคุณตรวจสอบรูปแบบ CP-1252 รหัสของหน้าแล้วคุณจะเห็นว่าแต่ละไบต์ผู้ที่ยืนสำหรับตัวละครแต่ละบุคคลâ
, และ€
™
และจะแก้ไขได้อย่างไร?
ใช้ UTF-8 แทน CP-1252 เพื่ออ่านเขียนจัดเก็บและแสดงอักขระ
ฉันตั้งค่า Content-Type เป็น UTF-8 ทั้งใน<head>
แท็กและส่วนหัว HTTP ของฉัน:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
สิ่งนี้จะสั่งเฉพาะไคลเอ็นต์ที่จะใช้การเข้ารหัสเพื่อตีความและแสดงอักขระ สิ่งนี้ไม่ได้สั่งให้โปรแกรมของคุณเองที่จะใช้การเข้ารหัสเพื่ออ่านเขียนจัดเก็บและแสดงอักขระคำตอบที่แน่นอนขึ้นอยู่กับแพลตฟอร์ม / ฐานข้อมูล / ภาษาโปรแกรมที่ใช้ในฝั่งเซิร์ฟเวอร์ โปรดทราบว่าชุดหนึ่งในส่วนหัวการตอบกลับ HTTP มีความสำคัญเหนือเมตาแท็ก HTML เมตาแท็ก HTML จะใช้ก็ต่อเมื่อเปิดเพจจากระบบไฟล์โลคัลดิสก์แทนที่จะใช้จาก HTTP
นอกจากนี้เบราว์เซอร์ของฉันถูกตั้งค่าเป็นUnicode (UTF-8)
:
สิ่งนี้บังคับเฉพาะไคลเอ็นต์ที่ใช้การเข้ารหัสเพื่อตีความและแสดงอักขระ แต่ปัญหาที่เกิดขึ้นจริงคือการที่คุณจะส่งแล้ว’
(เข้ารหัสใน UTF-8) ’
ให้กับลูกค้าแทน ไคลเอ็นต์แสดงอย่างถูกต้อง’
โดยใช้การเข้ารหัส UTF-8 หากไคลเอ็นต์ถูกกำหนดให้ใช้ผิดเช่น ISO-8859-1 คุณน่าจะได้เห็นââ¬â¢
แทน
ฉันใช้ ASP.NET 2.0 กับฐานข้อมูล
ปัญหานี้เป็นไปได้มากที่สุด คุณต้องตรวจสอบด้วยเครื่องมือฐานข้อมูลอิสระว่าข้อมูลมีลักษณะอย่างไร
หากมี’
อักขระแสดงว่าคุณเชื่อมต่อกับฐานข้อมูลไม่ถูกต้อง คุณต้องบอกให้ตัวเชื่อมต่อฐานข้อมูลใช้ UTF-8
หากฐานข้อมูลของคุณมี’
นั่นแสดงว่าฐานข้อมูลของคุณยุ่งเหยิง UTF-8
ส่วนใหญ่อาจตารางไม่ได้กำหนดค่ากับการใช้งาน แต่จะใช้การเข้ารหัสเริ่มต้นของฐานข้อมูลซึ่งแตกต่างกันไปตามการกำหนดค่า หากนี่เป็นปัญหาของคุณโดยปกติแล้วการปรับเปลี่ยนตารางเพื่อใช้ UTF-8 ก็เพียงพอแล้ว หากฐานข้อมูลของคุณไม่รองรับคุณจะต้องสร้างตารางใหม่ เป็นแนวทางปฏิบัติที่ดีในการตั้งค่าการเข้ารหัสของตารางเมื่อคุณสร้างตาราง
คุณมักจะใช้ SQL Server แต่นี่คือรหัส MySQL (คัดลอกมาจากบทความนี้ ):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
หากตารางของคุณเป็น UTF-8 อยู่แล้วคุณจะต้องถอยหลัง ใครหรืออะไรใส่ข้อมูลไว้ที่นั่น นั่นคือจุดที่เป็นปัญหา ตัวอย่างหนึ่งคือค่าที่ส่งในรูปแบบ HTML ซึ่งเข้ารหัส / ถอดรหัสไม่ถูกต้อง
ลิงก์เพิ่มเติมเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับปัญหามีดังนี้