อ่านไฟล์ UTF-8 ด้วย libicu และภาษา C

ICU เป็น library สำหรับจัดการเกี่ยวกับข้อความภาษาต่างๆ นานา โดยเฉพาะที่เก็บโดยใช้ Unicode ในภาษา C, C++ และ Java. ผมก็ด้อมๆ มองอยู่นานแล้วก็ยังไม่ค่อยได้ลองใช้เท่าไหร่. พอดีวันนี้อยากอ่านไฟล์ข้อความที่เข้ารหัสไว้แบบ UTF-8 แต่ว่าพออ่านมาแล้วอยากจะแปลงเป็น UCS-4 หรือ UCS-2 ก็ได้. จะเขียนทั้งหมดก็พอมี source code เก่าเอามา reuse ได้. แต่มันก็คงไม่สนุกลองใช้ ICU ดูบ้างดีกว่า. โปรแกรมข้างล่างนี่ก็จะพิมพ์มีรหัส unicode (ในแบบเลขฐาน 16) ของอักษรแต่ละตัวมาให้ดู. สมมุติว่าไฟล์ชื่อ playu.c นะ.


#include 
#include 
#include 
int
main()
{
#define   BUF_SIZE   4096
    UFILE *fp;
    UChar buf[BUF_SIZE];
    int read_size;

   
    if((fp = u_fopen("thai_utf8.txt", "r", NULL, "UTF-8")) == NULL) {
        printf("Cannot open file\n");
        exit(EXIT_FAILURE);
    }
    while((read_size = u_file_read(buf, BUF_SIZE, fp)) > 0) {
        int i;
        for(i = 0; i < read_size; i++)
            printf("0x%04X\n", buf[i]);
    }
    u_fclose(fp);
    return EXIT_SUCCESS;
}

เวลาจะ build ก็สั่งแบบนี้

gcc -Wall -g -licuio playu.c

ก็จะได้ a.out ออกมา

สมมุติอีกนิดว่าในไฟล์ thai_utf8.txt มีอักษรเขียนว่า ก์ แล้วก็ขึ้นบรรทัดใหม่

พอ run a.out ก็ได้จะผลแบบข้างล่าง

$ ./a.out
0x0E01
0x0E4C
0x000A
$

ทีแรกนึกว่าจะใช้ยากดูแบบนี้ก็คล้ายๆ ใช้ libc ธรรมดาดี ชอบๆ🙂.

One thought on “อ่านไฟล์ UTF-8 ด้วย libicu และภาษา C

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s