ย้ายบล็อกไปที่ bact.cc แล้วนะครับ

พ.ร.บ.คอมพิวเตอร์
หยุด ร่างพ.ร.บ.คอมพิวเตอร์
พื้นที่เก็บข้อมูลออนไลน์ ฟรี 2GB จาก Dropbox (sync กับ Windows, Linux, Mac, iPhone, Android ฯลฯ ได้)
Showing posts with label character set. Show all posts
Showing posts with label character set. Show all posts

2009-04-22

encode("UTF-8", "ignore") ข้าม ๆ เรื่องที่ทำไม่ได้ใน Python

หลังจากเอา python-libthai ของวีร์มาใช้กับข้อมูลที่ได้มาจากเว็บ ก็พบปัญหาเรื่อง character encoding นิดหน่อย

libthai นั้นปัจจุบันทำงานกับข้อมูลที่เป็นภาษาไทย 8 บิตอยู่ (น่าจะเป็น TIS-620) ตัว python-libthai เลยมีขั้นตอนการแปลงจากยูนิโค้ดไปเป็น 8 บิตก่อน ทีนี้ ปรากฏว่า encoder "CP874", "TIS_620" และ "ISO8859_11" ของ Python มันดันแปลงตัวอักษรบางตัวไม่ได้ (เนื่องจากใน charset พวกนั้น มันไม่มีตัวอักษรดังกล่าว) โปรแกรมก็เลยจะตาย ถ้าไปเจออักษรพวกนั้น

ก่อนตายมันจะโวยทำนองว่า :

UnicodeEncodeError: 'charmap' codec can't encode character
u'\u200b' in position 3560: character maps to <undefined>

วิธีแก้แบบถึก ๆ คือ เอาหูไปนาเอาตาไปไร่ซะ ignore มัน ด้วยการไปแก้ แฟ้มชื่อ libthai.c ของ python-libthai (แฟ้มนี้เป็น wrapper ที่ไปเรียก libthai ให้)

หาบรรทัดที่เรียกฟังก์ชั่น PyUnicode_Encode/Decode แล้วแก้พารามิเตอร์ตัวที่สี่เป็น "ignore" ซะ

เช่น จาก


PyObject *txt_cp874 =
    PyUnicode_Encode(s1, s1_len, "CP874", NULL);
tok =
    PyUnicode_Decode(buffer, tok_len, "CP874", NULL);

เป็น


PyObject *txt_cp874 =
    PyUnicode_Encode(s1, s1_len, "CP874", "ignore");
tok =
    PyUnicode_Decode(buffer, tok_len, "CP874", "ignore");

แล้ว sudo python setup.py install ใหม่อีกรอบ (อย่าลืมล้าง build เก่าทิ้งก่อน) ก็น่าจะใช้ได้แล้วครับ

ลิงก์ : Python Unicode How-to

technorati tags: , ,

2007-12-27

Time for Unicode ?

เราควรจะเปลี่ยนไปใช้รหัสข้อมูลอะไรดี ? สำหรับเอกสารภาษาไทยในโลกยุคอินเทอร์เน็ต

จะ Windows-874, TIS-620 หรือ ISO-8859-11 ก็คงไม่เพียงพอแล้ว สำหรับโลกยุคอินเทอร์เน็ตและสังคมพหุภาษา แม้แต่เอกสาร “ภาษาไทย” ในปัจจุบันก็ยังมีตัวอักษรละตินหรือสัญลักษณ์พิเศษต่าง ๆ แทรกอยู่มากมาย ซึ่งบางตัวก็ไม่ได้มีอยู่ทั้งใน Windows-874, TIS-620 และ ISO-8850-11

ได้เวลาเปลี่ยนมาใช้ Unicode ให้หมดรึยังนะ ?
(สำหรับงานส่วนใหญ่ ที่ขนาดพื้นที่จัดเก็บข้อมูล/แบนด์วิธ ไม่ได้เป็นข้อจำกัดสำคัญอีกต่อไปแล้ว)

ทั้งหน้าเว็บ ไฟล์เอกสาร metadata โค้ดโปรแกรมต่าง ๆ

แต่จะใช้อะไรดี UTF-8 หรือ UTF-16 ?

Windows NT ขึ้นไป, Windows CE, Java, .NET, Mac OS X และ Qt แพลตฟอร์มเหล่านี้ ใช้ UTF-16 เป็น native character set
แต่ถ้าเป็นโลก Unix และอินเทอร์เน็ต UTF-8 ก็แพร่หลายกว่า

ถ้าพูดถึงเฉพาะที่เกี่ยวข้องกับอินเทอร์เน็ต ไปใช้ UTF-8 กันให้หมดเลยดีมั๊ย ? สำหรับข้อมูลภาษาไทย ทั้งหน้าเว็บ ฐานข้อมูล metadata ฯลฯ

ข้อดี-ข้อเสีย ? อะไรคืออุปสรรค ?

technorati tags: , ,

2007-03-01

Encodings/Charsets in Java

Encoding, Canadian Mind Products's Java Glossary
a very detailed resources on encoding/charset-related stuffs in Java ละเอียดมาก

List of supported encodings, how to convert them, guide to Readers, other classes/methods, etc.

Plus, Unicode in Java by Jason Orendorff

(เมื่อคืนทดลองใช้ iBATIS (ORM ตัวนึง) กับภาษาไทยใน MySQL ไม่เวิร์กแฮะ ฟิลด์ไหนที่เป็นภาษาไทย get ออกมาแล้วกลายเป็น null หมดเลย)

technorati tags: , ,

2005-11-14

Charset in MySQL 5

MySQL 5 - Connection Character Sets and Collations

มีปัญหา จะใช้ PEAR::MDB2 อ่านข้อความ utf-8 จาก MySQL (โพสต์ไว้ที่ Narisa.com) ปรากฏว่าข้อความ(ภาษาไทย, ภาษา non-Latin1)กลายเป็น ??? หมดเลย

หาในเน็ตอยู่นาน ปรากฏว่า ต้องเพิ่มคำสั่งนี้เข้าไปก่อนจะเริ่ม query SELECT

$db->query("SET CHARACTER SET utf8");

แต่ทำแบบนี้ก็กลายเป็นว่า ไม่รู้จะใช้ MDB2 (database abstraction layer) ไปทำไม เพราะ query นี้มันมีเฉพาะ MySQL ! :(

มีคนแจ้ง “บั๊ก” (ขอเพิ่มฟีเจอร์) ไว้แล้ว

2005-05-07

Charset Detectors

นาน ๆ จะโพสต์อะไรที่มีสาระที ต้องเก็บไว้หน่อย :P

เบื่อเป็นหวัด

2004-08-05

ทดสอบ flickr

ถ่ายที่ท่าพระจันทร์ งานรับปริญญาเมื่อสองปีที่แล้ว (ปีที่ออยรับน่ะ)
ด้วย Lomo Supersampler (ถูกขโมยไปแล้ว พร้อมทรัพย์สินมีค่าหลายรายการ)

สรุปว่า flickr ไม่เวิร์กกับภาษาไทย (UTF-8) นะครับ