ลอง decode ภาษาไทยเช่น ‘ก’.decode(‘utf-8’) แล้วได้
>>> 'ก'.decode('utf-8') Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> 'ก'.decode('utf-8') File "C:\Python25\lib\encodings\utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError: 'utf8' codec can't decode byte 0xa1 in position 0: unexpected code byte
แต่ถ้าเป็น iso-8859-11 tis-620กลับได้
ท่านใดเคยเจอบ้างครับ ผมลองบนวินโดว์หนะครับ
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
ขึ้นอยู่กับว่าตั้งค่าที่ terminal ให้ใช้ encoding อะไรครับ.
ถ้าได้แบบข้างล่างแสดงว่า terminal เป็นอะไรประมาณ TIS-620
แต่ถ้าออกมาแบบที่สองนี้ก็น่าจะเป็นเป็น UTF-8
ถ้ามันออกมาแบบแรกแล้วสั่ง “ก”.decode(“UTF-8”) แล้วเจ๊งก็ถูกแล้วเพราะมันไม่ใช่ UTF-8 :-)
ถ้าเกิดไม่ได้ใช้ Interactive console มันก็จะไปขึ้นอยู่กับว่าเลือกตอน save (ใน editor) เป็นอะไรแทน
ผมลองกับ IDLE หนะครับ
ผมเข้าใจว่า UTF-8 น่าจะได้ทั้งหมด แต่มันไม่ได้แฮะ แปลกดี เนื่องจากว่าถ้าเราไม่รู้ encoding ก็ควรจะเดาว่าเป็น utf-8 แล้วแบบนี้จะเดาว่าไรดีเนี่ย
อันนี้มัน issue ของ django หนะครับ จริงๆแล้วมันสามารถตั้งค่าได้ว่าจะให้ใช้ encoding แบบไหน แต่มันกลับไม่ใช้ในตอนที่ instantiate request object ซะงั้น
อันนี้เป็นลิงค์ที่คุยกัน http://groups.google.com/group/django-users/browse_thread/thread/be82b5a3868a760a#
ใช้
ได้หรือเปล่า?
ปัญหาคือ windows ไม่ใช่ utf-8
นี่แหละปัญหาครับ แปลกมากๆ และที่สุดยอดมากๆ ก็คือ python default encoding ของ window คือ ascii ครับ สุดท้ายก็ต้องเดาซักทาง แต่ถ้าคิดได้ตอนนี้น่าจะใช้ settings เข้าช่วย ประมาณว่าเราต้องรู้ encoding และก็แปลงกันตั้งแต่ต้น
เพราะวินโดส์ไม่ใช่ utf-8 ถ้าจะให้ทำเป็น utf-8 ก็ดูจะฉลาดเกินไป
ที่ต้นไฟล์ manage.py
และใส่
# -*- coding: utf-8 -*-ที่ต้นไฟล์ทุกๆ ไฟล์ที่เหลือ
ใน web reportlab ก็คุยเรื่องนี้อยู่เหมือนกัน (บน windows ด้วย) http://www.reportlab.com/i18n/python_unicode_tutorial.html
อย่าลืม set editor ให้ใช้ encoding เป็น utf-8
ปัญหาคือมันใช้ utf-8 แล้วมัน decode ไม่ได้หนะครับ ไม่ไช่ว่ามันตั้งค่า encoding ไม่ได้ แล้วที่ไม่ได้ก็ไม่ได้เป็นบางภาษา ตอนนี้ทาง django เองก็ยังไม่แก้ ประมาณว่าถ้ามี url ที่ decode ไม่ได้มันจะให้ 400 django fails on defective unicode strings appearing in the url หนะ
ข้างล่างคือที่ผมเสนอไปให้ทาง django ดู
อืม ปัญหานี้มันเกิดจากสิ่งที่ไม่ใช่ unicode แปลว่าเยอรมันก็ยังไม่ปรับมาใช้ utf-8 เหมือนกัน
กำลัง setup test environment จะได้ลองมั่ง ใช้ django จาก trunk?
ลองทดสอบบน Windows XP Home ตั้ง Region เป็นประเทศไทย Language เป็นไทย ด้วย Django จาก Trunk และ Python-2.5.2
ลอง
บน firefox
แบบบังคับให้ใช้ utf-8 เป็น default ก็ให้ผลเหมือนกัน คือใช้ได้ทุกกรณี ลองกับภาษาอื่นก็เหมือนกัน ข้างล่างลองใส่ Traditional Chinese เข้าไปที่ URL
