ICU เป็น library สำหรับจัดการเกี่ยวกับข้อความภาษาต่างๆ นานา โดยเฉพาะที่เก็บโดยใช้ Unicode ในภาษา C, C++ และ Java. ผมก็ด้อมๆ มองอยู่นานแล้วก็ยังไม่ค่อยได้ลองใช้เท่าไหร่. พอดีวันนี้อยากอ่านไฟล์ข้อความที่เข้ารหัสไว้แบบ UTF-8 แต่ว่าพออ่านมาแล้วอยากจะแปลงเป็น UCS-4 หรือ UCS-2 ก็ได้. จะเขียนทั้งหมดก็พอมี source code เก่าเอามา reuse ได้. แต่มันก็คงไม่สนุกลองใช้ ICU ดูบ้างดีกว่า. โปรแกรมข้างล่างนี่ก็จะพิมพ์มีรหัส unicode (ในแบบเลขฐาน 16) ของอักษรแต่ละตัวมาให้ดู. สมมุติว่าไฟล์ชื่อ playu.c นะ.
#include <stdio .h>
#include <stdlib .h>
#include <unicode /ustdio.h>
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
0×0E01
0×0E4C
0×000A
$
ทีแรกนึกว่าจะใช้ยากดูแบบนี้ก็คล้ายๆ ใช้ libc ธรรมดาดี ชอบๆ :-).
hi hacker!
ความเห็น โดย udomsak — 15 เมษายน 2008 @ 07:54