แก้ dBase เป็น TIS-620

เผยแพร่เมื่อ:

ปรับปรุง/แก้ไขล่าสุดเมื่อ:

แก้ dBase เป็น TIS-620 เป็นวิธีที่ไม่ค่อยแนะนำเท่าไหร่ แต่มีคนถามมาว่าจะตั้งค่าdBase file ใน ArcGIS ให้เป็น TIS-620 โดยอัตโนมัติได้มั้ย เพราะการทำงานในปัจจุบันยังคงใช้ TIS-620 อยู่เป็นหลัก เชปไฟล์ที่ได้มาก็ทำในระบบ TIS-620 ก็เลยเจอปัญหาจุกจิกเรื่องเปิด Attribute Table แล้วภาษาไทยมันเพี้ยนไปหมด

เท่าที่ลองใช้ ArcGIS/QGIS มาระยะหนึ่ง พบว่าสิ่งที่เป็นปัญหาพื้นฐานง่าย ๆ แต่จุกจิก ก็คือเรื่องการแสดงผลภาษาไทยนี่เอง เพราะอักขระภาษาไทยเรามีการเข้ารหัสหลายแบบ ไม่ว่าจะเป็น 

  • TIS-620
  • Windows-874
  • UTF-8

ซึ่งเรื่อง encoding ของตัวอักษรนี่เป็นปัญหามากเวลาใช้งานซอฟต์แวร์หลายประเภทโดยเฉพาะเวลาทำ database

เรื่อง Character Encoding เป็นปัญหามานาน เพราะเดิมทีภาษาไทยเรามีทั้ง

  • ISO-8859-11 
  • TIS-620
  • CP874
  • MacThai
  • UTF-8

ปัจจุบันนี้ส่วนใหญ่จะเข้ารหัสตัวอักษรเป็น UTF-8 (อย่างพวก google) ArcGIS ตั้งแต่เวอร์ชัน 10.2.1 เป็นต้นมาก็เปลี่ยนมาใช้ UTF-8 เป็นค่ามาตรฐาน แต่เชปไฟล์ต่าง ๆ ที่เราใช้งานส่วนใหญ่สร้างมานานแล้วโดยใช้ระบบ TIS-620 ส่วน Windows ยังใช้ Windows-874 กันเป็นส่วนใหญ่ ก็เลยจะมีปัญหาเวลาแสดงผลภาษาไทยใน ArcGIS อยู่เสมอ

โดยส่วนตัว จะตั้งค่าเป็น UTF-8 ด้วยเหตุผลว่าเข้ากันได้ดีกับรหัส ASCII ถ้าเอาไปใช้ร่วมกับโปรแกรมอื่นจะมีปัญหาน้อยที่สุด (อันนี้ประสบการณ์ส่วนตัว) .NET Core Framework ปัจจุบันก็ไม่สนับสนุน TIS-620 (อ่านเพิ่มเติมได้ที่ https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-encoding)

แต่ข้อเสียของการใช้ UTF-8 ก็มีเวลาแปลงฐานข้อมูลเดิมในระบบ TIS-620 มาเป็น UTF-8 ต้องมาขยายความกว้าง Field ที่เป็น Varchar เพื่อรองรับ UTF-8 ไม่งั้นจะโดนตัดคำไป

แต่เมื่อต้องทำงานร่วมกับคนอื่นที่ตั้งค่าเป็น TIS-620 ตลอดเวลา ก็ต้องแปลงกลับไปกลับมาเพื่อกันข้อมูลมีปัญหาเวลาคนอื่นทำงานต่อจากเรา

ปกติจะให้ใช้วิธีแก้ไข Character Encoding อย่างที่เคยเขียนวิธีไปแล้ว แต่ก็พบว่ายังมีปัญหาเวลานำไฟล์ dBase (.dbf) ไปใช้ หรือเปิด .dbf โดยตรงในโปรแกรมอื่นแล้วมีปัญหา (ความจริง ใน Excel กับ Access มันจะมีตัวเลือก encoding ตอนนำเข้า แต่บางคนก็ลืมดู หรือไม่ได้อ่าน กด next next OK OK…เลยออกมาเป็นอักขระที่อ่านไม่รู้เรื่อง)

เรื่องนี้ก็มีคนแก้ปัญหาว่า ถ้างั้นทำให้ dBase ของ ArcMap ใช้ encoding TIS-620 ตั้งแต่แรกไปเลยสิ อันนี้มาจากเว็บ ESRI โดยตรง https://support.esri.com/en/technical-article/000013192

1. เรียก Regedit (Windows 10 พิมพ์ Regedit ตรงช่องค้นหาตรง ๆ เลย)

2. เลือก HKEY_CURRENT_USER > Software > ESRI Desktop 10.x (เลือกเวอร์ชันที่ใช้อยู่)

3. สร้าง key ชื่อ Common (คลิกขวา เลือก new > key)

4. ใน Common ให้สร้าง key ใหม่ตั้งชื่อ CodePage

5. สร้าง String Value ชื่อ dbfDefault ใน CodePage (คลิกขวา เลือก New>String)

6. คลิกขวาไฟล์ dbfDefault เลือก Modify ใส่ข้อมูลตรง Value Data เป็น 885911 แล้วคลิกโอเค ปิดไป

7. สร้าง ChangeCodePage.bat ขึ้นมา วิธีคือคลิกขวาที่หน้า desktop หรือ ที่หน้า explorer ก็ได้ New > text file แล้วใส่ข้อความดังนี้

@ECHO OFF
IF "%1"=="" GOTO :EOF
reg add HKEY_CURRENT_USER\Software\ESRI\Desktop10.3\Common\CodePage /v dbfDefault /t REG_SZ /d %1 /f

8. เซฟไฟล์เสร็จแล้ว รีเนมนามสกุลจาก .txt ให้เป็น .bat

9. ดับเบิลคลิกที่ไฟล์ ChangeCodePage.bat หรือจะให้ดี คลิกขวาแล้วเลือก Run as Administrator

แก้ dBase เป็น TIS-620

เพียงเท่านี้ encoding ของ dBase (dbf) ของเชฟไฟล์ก็จะเป็น TIS-620

อย่างไรก็ตาม ขอย้ำว่า DataRevol.com ไม่แนะนำให้ทำตามวิธีนี้ เพราะแนวโน้มในปัจจุบัน การใช้ TIS-620 ก็น่าจะลดความนิยมไปเป็นระยะ แต่ที่เขียนนี้เพราะว่า มีคนอยากได้วิธีแบบนี้จริง ๆ ก็เลยหาวิธีทำให้