การติดตั้งภาษาไทยใน Command shell ของวินโดว์ 7
ภาษาไทยที่พิมพ์หรือแสดงผลบนหน้าจอของ Command shell จะเห็นเป็นกรอบสี่เหลี่ยม ดังรูปข้างล่างนี้ ถึงแม้จะเปลี่ยนฟอนต์เป็นแบบอื่นแล้วก็ตาม ยังไม่สามารถแสดงฟอนต์ภาษาไทยได้เลย
การตั้งค่ากำหนดให้ Command shell แสดงผลภาษาไทยได้นั้น ต้องไปแก้ไขระดับ registry ของวินโดว์ ก่อนลงมือทำ ควรสำรอง registry ปัจจุบันไว้ก่อน หากมีปัญหาขัดข้องเกิดขึ้นจะได้ import รีจิสตรีที่สำรองไว้นี้มาใช้ดังเดิม
สำรอง registry
การสำรองเก็บไว้ทำได้ดังนี้
- กดปุ่ม windows + R พิมพ์คำว่า regedit
- คลิก OK จะมีหน้าต่างของโปรแกรม registry editor ผุดขึ้นมา คลิกที่เมนู File >> Export..
- ใส่ชื่อไฟล์ที่จะเก็บรีจิสตรีสำรองนี้เป็น backupRegistry.reg เลือกหัวข้อ All ด้วย มิฉะนั้นการสำรองไฟล์อาจสำรองไม่ครบทั้งหมด คลิกปุ่ม save รอประมาณ 2-3 นาที จะได้ไฟล์สำรองเก็บไว้ในโฟลเดอร์ Documents
ติดตั้้งภาษาไทยให้ Command Shell
- ติดตั้งฟอนต์ที่สามารถแสดงผลภาษาไทย ในที่นี้จะใช้ Courier MonoThai ซึ่งฟอนต์ชนิด Fixed pitch font แต่ละตัวอักษรจะมีช่องไฟเป็นระยะเท่า ๆ กันเสมอ
- กดปุ่ม windows + r พิมพ์คำว่า fonts (มี s ต่อท้ายด้วย)
- ติดตั้งฟอนต์ Courier Mono โดยนำไฟล์ courmon.ttf มาใส่ในโฟลเดอร์ fonts ที่เปิดไว้นี้ วินโดว์จะทำการติดตั้งฟอนต์ให้อัตโนมัติ
- แกไขรีจิสตรี โดยใช้ registry editor ดังนี้HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\Nlsให้เพิ่มข้อมูลชนิด String ชื่อ "0000041e" โดยที่ไม่ต้องใส่ค่าอะไรลงไป
- แก้ไขรีจิสตรี ทำต่อเนื่องมาจากขั้นที่ 2HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFontให้เพิ่มข้อมูลชนิด String ชื่อ "874" มีข้อมูลภายในคือ "Courier MonoThai" เปลี่ยนค่าdefault ให้เป็น "Courier MonoThai" ด้วย
- แก้ไขรีจิสตรีHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\เพิ่ม key “MS-DOS Emulation” โดยมี attribute เป็น default (ข้อมูลชนิด String) และ DisplayParams (ข้อมูลชนิด Binary) value ของ attribute ทั้งสอง มีค่าดังรูป
- แก้ไขรีจิสตรี HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes ให้เพิ่มข้อมูลชนิด String ชื่อต่อไปนี้"0000041E" ข้อมูลมีค่าเป็น "th"
"0001041E" มีค่าเป็น "th""0002041E" มีค่าเป็น "th""0003041E" มีค่าเป็น "th"
เป็นอันสิ้นสุดการแก้ไขรีจิสตรี จากนั้นให้ restart วินโดว์ใหม่ เพื่อให้รับรู้ค่าของรีจิสตรีที่มีการเพิ่มค่าหรือเปลี่ยนแปลงไป - เมื่อรีสตาร์ตเครื่องแล้ว ต้องไปกำหนด properties ของ Command Shell ดังนี้
"DisplayParams"=hex:40,01,00,00,f0,00,00,00,00,04,00,00,00,03,00,00,60,00,00,\
00,60,00,00,00,24,00,00,00,24,00,00,00,10,00,00,00,4c,00,75,00,63,00,69,00,\
64,00,61,00,20,00,43,00,6f,00,6e,00,73,00,6f,00,6c,00,65,00,00,00,12,00,91,\
ad,f5,77,e0,00,12,00,b0,e2,3e,77,74,23,dd,77,a8,f8,ca,01,ba,6d,d4,77,ec,6d,\
d4,77,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,d8,f8,ca,01,15,e4,4a,\
77,01,00,00,80,b0,e2,3e,77,00,00,00,00,19,00,02,00,d4,f8,ca,01,a4,03,00,00,\
00,00,00,00,20,b4,5c,77,89,e4,4a,77,01,00,00,80,20,b4,5c,77
,
ที่ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation\Font สร้าง key ชื่อ Font ชนิดข้อมูลแบบ String โดยมีค่าเป็น Courier Mono Thai
เส้นทางลัด
การทำตามขั้นตอนทั้ง 6 ขั้น อาจจะลำบากตอนพิมพ์ข้อความ โอกาสที่จะเกิดข้อผิดพลาดเป็นไปได้มาก จึงมีวิธีลัดดังนี้
- ดาวน์โหลด zip file ชื่อ ThaiLang4CMD.zip มาเก็บไว้ในเครื่องคอมพิวเตอร์ของเรา จากนั้นแตกไฟล์จะได้ไฟล์ 2 ไฟล์คือ Courmon.ttf ซึ่งเป็นฟอนต์ ชนิด True Type Font สามารถแสดงผลภาษาไทยที่ให้ระยะห่างระหว่างตัวอักษรแต่ละตัวเท่า ๆ กัน อีกไฟล์ หนึ่งคือ ThaiLangInDOS.reg เป็นไฟล์รีจิสทรี สำเร็จรูป
- ติดตั้งฟอนต์ Courier Mono Thai ตามขั้นตอนที่ 1 ของหัวข้อติดตั้งภาษาไทยให้แก่ Command Shell
- ดับเบิลคลิกที่ไฟล์ ThaiLangInDOS.reg จะเป็นการนำรีจิสตรี ตั้งแต่ขั้นที่ 2 ถึงขั้นที่ 5 import เข้าไปไว้ในระบบรีจิสตรี โดยที่เราไม่ต้องพิมพ์ให้เสียเวลา
- รีสตาร์ต Windows
- เข้าไปกำหนด properties ของ Command shell ตามขั้นตอนที่ 6 ถ้าไม่มีข้อผิดพลาด จะเห็น Command shell แสดงภาษาไทยได้ตามรูป
การแสดงผลภาษาไทยที่เข้ารหัสแบบ UTF-8
ถึงแม้จะพิมพ์ภาษาไทยที่ตัวอักษร สระ และวรรณยุกต์ได้ถูกต้องทุกประการ แต่เมื่อนำเอกสารภาษาไทยที่เข้ารหัสแบบ UTF-8 พบว่าจะแสดงตัวอักษรออกมาแบบอ่านแล้วไม่รู้เรื่อง
ภาพบนคือข้อความในไฟล์ TestThai.txt โดยใช้ภาษาไทยที่เข้ารหัสแบบ UTF-8 เมื่อใช้คำสั่ง Type พิมพ์ข้อความใน Command shell พบว่าแสดงผลภาษาไทยผิดเพี้ยนไปจากข้อความที่แท้จริง
เมื่อใช้คำสั่ง chcp ตรวจสอบการเข้ารหัสภาษาไทยของ Command shell พบว่ามีการเข้ารหัสหรือใช้ codepage แบบ 874 หรือ windows-874 ดังรูป
ในการแสดงผลภาษาไทยที่เข้ารหัสแบบ UTF-8 ต้องใช้คำสั่งเปลี่ยนการเข้ารหัสของ Command shell เสียก่อนดังนี้
Codepage หรือการเข้ารหัสแบบ 65001 เป็นการเข้ารหัสแบบ UTF-8 เมื่อใช้คำสั่ง type พิมพ์ไฟล์ testThai.txt จะได้ภาษาไทยที่ถูกต้อง
อย่างไรก็ตามการเปลี่ยนรหัสภาษาเป็น 65001 มีปัญหากับโปรแกรมที่ทำงานภายใต้ command shell เช่น myslq ที่เป็น client program ไม่สามารถรับข้อมูลภาษาไทยในกรณีที่เข้ารหัสแบบ UTF-8 ได้ แต่สามารถรับข้อมูลภาษาไทยที่เป็นรหัส TIS-620 เป็นต้น
REFERENCES & RESOURCES
- แนวทางบางส่วนได้มาจากบทความของผู้ใช้นามแฝงว่า “ทัชชี” http://www.justusers.net/articles/others/thaidosxp/thaidosxp.htm