Tags:
Forums: 

-- coding: utf-8 --

print len((u'aก').encode('utf-8'))

มันได้ผลลัีพท์ คือ 4 ทำไมมันไม่เท่ากับ 2 ครับ แล้วมีวิธีแก้ยังไงดีครับ

ขอบคุณครับ

Get latest news from Blognone
By: anu
Contributor
on 27 October 2008 - 16:09 #69644

-- coding: utf-8 --

print len((u’aก’).decode(‘utf-8’))

ได้มั๊ยครับ

By: willwill
ContributorAndroid
on 27 October 2008 - 20:19 #69653
willwill's picture

ภาษาไทยใน utf-8 = 3 ตัว ดังนั้นต้องเอาไปหาร 3 ครับ แต่ เนื่องจาก space และ a ไม่ใช่ภาษาไทย เจอ space ตัวเดียวนับผิดเลยครับ ดังนั้นควรจะเป็น


print len(u'aก')

แค่นี้พอครับ แล้วจะเข้าเข้ารหัสอะไรก็ค่อยไปทำหลัง len / เก็บไว้ตัวแปรอื่นครับ

By: preecha13 on 28 October 2008 - 09:27 #69681 Reply to:69653

ลอง print len(u‘aก’) ได้ผลถูกต้องตามที่ต้องการแล้วครับ
ขอบคุณมากครับ

By: kowito2
Android
on 28 October 2008 - 01:04 #69669

print (u' aก').encode('utf8')

aยก

By: preecha13 on 6 November 2008 - 08:43 #70667

สรุปจากการศึกษานะครับ

เมื่อ code program เป็นไฟล์แบบ utf-8
=======================
-การใส่ string ภาษาไทยเข้าไปใน control ต่างๆ ของ wxpython ต้องใส่ u ข้าง หน้าเสมอ เช่น การกำหนด label,caption,title ฯลฯ เป็นต้น
ตัวอย่าง เช่น
wx.MessageBox(u"ทำเสร็จแล้ว",u"แจ้งการทำงาน", wx.OK| wx.ICON_INFORMATION)

-การใช้คำสั่ง print กับ string ภาษาไทย ถ้าผ่านกระบวนการฟังก์ชั่นต้องใส่ u ข้าง หน้าก่อนผ่านฟังก์ชั่นนั้น
เช่น
print (u'000000'+u'กขค')[-4:].encode('utf-8') #อันนี้ก็ใช้ได้ ถ้าไม่ใส่ encode('utf-8') จะเกิด Error ทันที เพราะการทำ slide จะ return ค่ามาเป็นรหัสที่เราอ่านไม่รู้เรื่อง
print len(u'กข'+u'คง') # อันนี้ก็ใช้ได้
print ('ก'+'ข') # อันนี้ก็ใช้ได้

-คำสั่ง print เมื่อสร้าง app แบบ app = wx.App()
*หากมีการสั่ง print หน้าจอ console จะแสดงออกมาอีกหน้าจอหนึ่ง มีประโยชน์ใน การ debug
และการสั่งพิมพ์ข้อความภาษาไทยต้องใส u ข้างหน้า เช่น print u'กขคง'
*หากพิมพ์ตัวแปรที่ได้ค่ามาจากการอ่าน text file ที่เขียนแบบ utf-8 จะต้อง decode เพราะไม่เช่นนั้นคำสั่ง print จะไม่แสดงผลที่หน้า console
ต้อง decode เสมอ เช่น print ('you printed '+ตัวแปรที่อ่านค่ามาจาก text file).decode('utf-8')

-การเปรียบเทียบภาษาไทยใน code
เช่น
if 'ก2' == str_check: ตัวแปร str_check ตอนกำหนดก็ไม่ต้องใน u ข้างหน้า

  • หากตัวแปร str_check เป็นตัวที่เก็บค่าที่อ่านจาก text ไฟล์ที่เก็บเป็น utf อยู่ แล้วก็เปรียบเทียบตรงๆ ได้เลย