You are currently viewing ภาษาไทย ใน ArcGIS

ภาษาไทย ใน ArcGIS

ภาษาไทย ใน ArcGIS เป็นปัญหาจุกจิก เพราะข้อมูลจากหลายแหล่ง ดันใช้ encoding ไม่เหมือนกัน อักขระภาษาไทยเรามีการเข้ารหัสหลายแบบ ไม่ว่าจะเป็น TIS-620 Windows-874 และ UTF-8 ซึ่งเรื่อง encoding ของตัวอักษรนี่เป็นปัญหามากเวลาใช้งานซอฟต์แวร์หลายประเภทโดยเฉพาะเวลาทำ database

ภาษาไทย ใน ArcGIS

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

เรื่อง Character Encoding เป็นปัญหามานาน เพราะเดิมทีภาษาไทยเรามีทั้ง ISO-8859-11  TIS-620 CP874 MacThai และ UTF-8

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

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

แต่เมื่อต้องทำงานร่วมกับคนอื่นที่ตั้งค่าเป็น TIS-620 ตลอดเวลา ก็ต้องแปลงกลับไปกลับมาเพื่อกันข้อมูลมีปัญหาเวลาคนอื่นทำงานต่อจากเรา ปกติจะให้ใช้วิธีแก้ไข Character Encoding (เลื่อนลงไปดูข้างล่าง หัวข้อ แก้ไข Character Encoding)

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

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

วิธีแก้ encoding ของ dBase ให้เป็น TIS-620

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

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

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

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

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

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

ภาษาไทย ใน ArcGIS

สร้าง 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
  • เซฟไฟล์เสร็จแล้ว รีเนมนามสกุลจาก .txt ให้เป็น .bat
  • ดับเบิลคลิกที่ไฟล์ ChangeCodePage.bat หรือจะให้ดี คลิกขวาแล้วเลือก Run as Administrator

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

อย่างไรก็ตาม ภาษาไทย ใน ArcGIS ที่ใช้อยู่โดยทั่วไป จะเป็น UTF-8 ดังนั้นถ้าจะใช้วิธีนี้จริง ๆ โดยส่วนตัวไม่ค่อยแนะนำเท่าไหร่ เราต้อง move on จากมาตรฐานเดิม ๆ ดังนั้น แนะนำให้ใช้วิธีแปลง encoding น่าจะดีกว่า

แก้ไข Character Encoding

มีโอกาสได้เห็นคำบรรยายของใครสักคน เกี่ยวกับการแก้ไขปัญหา เปิดเชปไฟล์มาแล้วข้อมูลใน Attribute Table แล้วอ่านภาษาไทยไม่ออก ตัวอักขระกลายเป็นอะไรไม่รู้

ใครคนนั้นรู้ว่าปัญหาเกิดจาก character encoding คือ เชปไฟล์นั้นบันทึกมาใน TIS 620 (ชื่อเต็มของรหัสนี้คือ Thai Industrial Standard 620-2533 ภาษาทางราชการของไทยใช้ว่า มาตรฐานผลิตภัณฑ์อุตสาหกรรม 620-2533 หรือ มอก.620-2533 รายละเอียดของการเข้ารหัสนี้อ่านได้ที่ https://www.nectec.or.th/it-standards/std620/std620.html

มาตรฐานนี้บางทีก็ไม่เข้ากับมาตรฐานอื่นบ้าง บางคนคงเคยมีประสบการณ์ที่เข้าเว็บภาษาไทยรุ่นเก่าที่ไหนสักแห่งที่ใช้การเข้ารหัสนี้แล้วมีปัญหาตัวอักษรเพี้ยนกลายเป็นอะไรไม่รู้อ่านไม่ออก

พอเปิด Attribute Table แล้วอ่านไม่ออก ใครคนนั้นให้แก้โดยเปิด QGIS แล้ว Save As มาใหม่ โดยเปลี่ยนรหัสเป็น UTF 8 หรือถึงขั้นไปแก้ Registry (ซึ่งไม่ควรไปยุ่งกับ Registry ถ้าไม่รู้ว่ากำลังทำอะไรอยู่)

กำหนดค่า Encoding ให้กับ Shapefile

โดยส่วนตัว…ใช้อีกวิธีหนึ่ง

  • ไปที่เก็บไฟล์ต่าง ๆ ของเชปไฟล์
  • สร้างไฟล์ txt (คลิกขวาแล้ว New Text Document)
  • เปลี่ยนชื่อไฟล์ให้เป็นชื่อเดียวกับเชปไฟล์ (ใช้วิธี copy ชื่อไฟล์เลย)
  • เปิดไฟล์ขึ้นมา แล้วพิมพ์ TIS 620 หรือ OEM 874 (หรือ UTF 8 หรืออะไรตามที่ต้นฉบับมา)
  • เปลี่ยนนามสกุลไฟล์จาก .txt เป็น .cpg
  • ไปที่ ArcMap ให้ remove ชั้นข้อมูลนั้นออกไปก่อน แล้ว Add ข้อมูลนั้นกลับมาใหม่

ถ้าสงสัยว่าไฟล์ .cpg คืออะไร โปรดย้อนกลับไปอ่านเรื่อง Shapefile

เรียบร้อย Windows 874 จะมีการเข้ารหัสแบบเดียวกับ TIS 620 เพียงแต่ไมโครซอฟต์สร้างเพื่อใช้ในวินโดวส์