ก่อนอื่นขอแถลงไขคำว่าภาษาไทยยึกยือก่อน มันคืออะไรประมาณนี้ครับ
·´Êͺ¤ÃÑé§·Õè 1
จะเห็นได้ว่าตึวยึกยือพวกนี้อ่านไม่ออก แต่จริงๆแล้วมันเป็นภาษาไทยที่เป็นคำว่า "ทดสอบครั้งที่ 1"
ปัญหานี้มันเกิดจากเวลาเราเซฟไฟล์เป็น ANSI มันจะใช้พื้นที่ 1 byte ต่อการจัดเก็บอักขระ 1 ตัวครับ ดังนั้นภาษาอื่นๆนอกจากภาษาอังกฤษ (และตัวเลข + สัญลักษณ์บางส่วน) มันก็อาจจะแสดงผลไม่ถูกต้องถ้าเราไม่ได้กำหนด Codepage ที่ถูกต้องให้กับมัน
ถ้าเป็นใน C# เราอ่านเจ้าพวกยึกยือเข้ามาใน string (โดยที่เรารู้ว่ามันเป็นภาษาไทย) เราก็สามารถแปลงมันกลับเป็น string ที่อ่านออกใน C# ได้ดังต่อไปนี้ครับ
public string FixThaiCodePage(string str){
byte[] raw = Encoding.Default.GetBytes(str);
string res = Encoding.GetEncoding("windows-874").GetString(raw);
return res;
}
บรรทัดแรกเป็นการแปลงให้เป็นอาเรย์ของ byte ก่อน (จริงๆ string ใน C# จัดเก็บในรูปแบบไหนก็จำไม่ได้เหมือนกัน รู้สึกว่าจะเป็น UTF-16)
หลังจากนั้นจึงจัดการแปลงเป็น string โดยใช้ Windows-874 เป็น Codepage
Tags: c#, thai, ansi, encoding