ปกติ C ธรรมดาจะ support ตัวอักษรแบบเดียวคือ char ซึ่งเก็บข้อมูล 1 byte
แต่ C++ นอกจากจะรองรับ char แล้ว ยังรองรับ wchar_t ด้วย ซึ่งเก็บข้อมูล 2 bytes แล้วทำใช้ encoding แบบ Unicode (โดยบน windows (PC)ก็จะเรียงข้อมูลแบบ little-endian เช่น ก.ไก่ = 0x0E01 จะเก็บเป็นแบบ 01, 0E ในตัวแปรประเภท wchar_t)
แต่เนื่องจากระบบ wchar_t นี้ จะใช้การเก็บข้อมูลเป็นแบบ 2 bytes
ดังนั้นเวลาจะตรวจสอบว่า string อันนี้จบข้อความหรือยัง จะต้องตรวจสอบด้วยว่า มี 0x0000 รึเปล่า นั่นหมายถึงใช้ strlen แบบธรรมดาเช็คไม่ได้ เพราะตัวอักษรจบstringมันยาวเป็น2bytes ไม่ใช่แค่ไบต์เดียว(\0)แบบที่ strlen แบบปกติ ใช้เช็คว่าจบstringแล้ว
เมื่อฟังก์ชั่นเดิมที่ใช้เกี่ยวกับ string เดิมใช้ไม่ได้ เลยต้องใช้ฟังก์ชั่นที่ใช้งานสำหรับ wchar_t แทน
วิธีการจำง่ายๆ ก็คือ ฟังก์ชั่นไหนเป็นรูปแบบ strxxx(...) ก็ให้เปลี่ยนเป็น wcsxxx(...) แทน (wcs น่าจะมาจากคำว่า wide-character string)
วิธีการใช้งานภาษาซีให้ใช้ภาษาไทยได้
1. ใส่สองบรรทัดนี้ ไว้บนสุดของโค้ด
#define UNICODE
#define _UNICODE
2. จากเดิมที่ประกาศตัวแปรเป็น
3. เขียน L นำหน้า ค่าคงที่string
เช่น
wchar_t [ ] data = L"Hello World";
4. เปลี่ยนไปใช้functionที่รอง
เช่น
wcslen(..), wcscpy(..), swprintf(..), _wtol(...)
และเพื่อให้ผู้พัฒนาโปรแกรมได้เขียนโปรแกรมได้ควา
ทางคนคิด compiler ของ C++ จึงสร้างตัวแปรแบบพิเศษขึ้น
เพียงการใส่ #define UNICODE , #define _UNICODE เอง
หมายถึงว่า เมื่อไหร่ที่ต้องการให้โค้ดทั้งหมด ใช้งานตัวอักษรแบบ Unicode ก็ให้ใส่สองบรรทัดนี้
แต่ถ้าต้องการให้โค้ดทั้งหมด ใช้งานเป็นแค่ char ธรรมดา(1 byte) ก็แค่เอา สองบรรทัดนี้ออก
แต่ปัญหาอยู่ที่ว่า เนื่องจาก Compiler มีผู้ผลิตหลายเจ้าทั้ง VC, GNU, MingW32
ตัวแปรชนิดนี้เลยมีขึ้นมาหล
REF: http://www.codeproject.com
DEV-C++
ก่อนที่จะเริ่มเขียนภาษาไทยลงไปในโค้ดภาษาซีได้
เราจะต้องตั้งค่าให้ตัว editor ของ dev-c++ ที่ใช้ในการเขียนโค้ด รองรับ
(ไม่งั้นพิมพ์ไทยออกมาบนนั้น กลายเป็นตัวยึกยือแน่ๆ)
วิธีการก็คือ ทำได้โดย
1. การตั้ง font ให้เป็น courierMonoThai หาโหลดได้ทั่วไปในinternet
2. ต้องตั้งค่าให้ compiler ของdev-c++ จากเดิมเป็น gcc.exe, g++.exe, make.exe, ... ให้ใช้เป็น mingw32-gcc.exe, mingw32-g++.exe, mingw32-make.exe
ถึงแบบนั้นแล้วก็ยังไม่พอ เพราะถ้า compile ด้วยวิธีนี้แล้ว
จะยังขึ้น error ว่า "illegal byte sequence"
3. ต้องใส่ option ตอน compile ว่า -finput-charset=tis620 ด้วย หมายถึงว่าไฟล์โค้ดCนี้ถูกจัดเก็บด้วยการเข้ารหัส(encoding)แบบ TIS-620 ตัวคอมไพล์เลอร์จะได้ตีความถูก
4. หลังจากsetup ตัวeditor ให้พิมพ์ภาษาไทยได้แล้ว.. เวลา dev-c++ จะจัดเก็บsource code ก็ต้องสั่งให้มันจัดเก็บโค้ด .c ของเราให้เป็นชนิด TIS-620 ด้วย (แทนที่จะเก็บแบบ ascii แบบปกติ)
**หมายเหตุ
หา option ที่ทำให้มันเก็บแบบ Unicode ไม่เจอ, และถ้าเอา fileแบบ unicode มาเปิดใน dev-c++ มันก็อ่านไม่ออก เลยต้องใช้เป็นแบบ TIS620 แทน
Edited: Feb 21,2011 เพื่อให้มันอ่านออกง่ายขึ้น
เว็บดาวโหลดโปรแกรม Dev C++ พร้อมวิธีติดตั้งอย่างละเอียดครับ http://devcppbyc.blogspot.com/2016/02/dev-c.html
ReplyDeleteตามขั้นตอน ตาม link นี้จะต้อง setup อะไรเพิ่มเติมอีกไหมครับ ให้รองรับภาษาไทย ถ้าติดตั้งใน Window 8.1 64 bit และต้องใช้ font อะไรหรือครับ ของผมที่ download จากต้นตอโดยตรงมีปัญหากับภาษาไทย
ReplyDelete