2009-04-08

แก้ปัญหา .NET กับ paradox และมีปัญหากับข้อมูลภาษาไทย

หลังจากที่เสียเวลามาสองอาทิตย์กับ การที่พยายามจะเชื่อมต่อกับ Paradox DB เพื่อที่จะเขียน แอพฯ เสริมการใช้งาน ปัญหาที่พบคือ ตัวอักษรไม่สามารถแสดงผลได้อย่างถูกต้อง คือ แสดงผลเป็น " ╖┤╩═║" ซึ่งปกติแล้ว .NET แสดงผลเป็น UTF8 แต่ใน DB เก็บไว้เป็น Codepage DOS OEM 437 ครั้งจะเอามาแสดงผลก็พิกลพิการกันไปพอดี จากวิธีเดิมที่ผมทำคือ แปลงจาก UTF8 -> Windows-874 ซึ่งตามหลักต้องเป็นเช่นนั้น แต่ปรากฏว่าไม่ได้ผล
ด้วยความช่วยเหลือจาก pFz จากห้อง #ubuntu-th ( ที่เป็นห้องรวมพลคนรัก ubuntu ในไทย ) ช่วยแก้ไขเลยได้ code ออกมาตามข้างล่างนี้
'กำหนดต้วแปร Encoding Dim DOSenc As EncodingDim UTF8enc As EncodingDim w874 As Encoding
'กำหนดตัวแปร Array byte เพื่อทำการรับค่าจาก ฟังก์ชั่นที่ทำการแปลงข้อความ
Dim UTF8Byte As Byte()Dim DOSByte As Byte()
Dim Datastring As String
' # define DOS encode
DOSenc = Encoding.GetEncoding(437)
' #denfine UTF8 encode
UTF8enc = Encoding.UTF8
' #define Windows-874 encode
w874 = Encoding.GetEncoding(874)
' สมมุติว่า ตัวอักษรที่รับเข้ามา คือ ตัวแปร s นะครับ
UTF8Byte = UTF8enc.GetBytes(s)
' ใช้ฟังก์ชั่น Encoding.Convert แปลง Encoding โดยแปลงจาก UTF8 -> OEM 437
DOSByte = Encoding.Convert(UTF8enc, DOSenc, UTF8Byte)
' จากนั้นใช้ Method GetString เพื่อทำการแปลง Byte ให้กลายเป็น String อีกที สังเกตว่าเราเอา Byte ' ที่ได้จากแปลงคือ OEM 437 มาใส่ให้ Windows-874 encoding แสดงผล
Datastring = w874.GetString(DOSByte)
#class use
System.text.encoding

No comments: