print len((u'aก').encode('utf-8'))
มันได้ผลลัีพท์ คือ 4 ทำไมมันไม่เท่ากับ 2 ครับ แล้วมีวิธีแก้ยังไงดีครับ
ขอบคุณครับ
print len((u’aก’).decode(‘utf-8’))
ได้มั๊ยครับ
ภาษาไทยใน utf-8 = 3 ตัว ดังนั้นต้องเอาไปหาร 3 ครับ แต่ เนื่องจาก space และ a ไม่ใช่ภาษาไทย เจอ space ตัวเดียวนับผิดเลยครับ ดังนั้นควรจะเป็น
print len(u'aก')
แค่นี้พอครับ แล้วจะเข้าเข้ารหัสอะไรก็ค่อยไปทำหลัง len / เก็บไว้ตัวแปรอื่นครับ
ลอง print len(u‘aก’) ได้ผลถูกต้องตามที่ต้องการแล้วครับ ขอบคุณมากครับ
print (u' aก').encode('utf8')
aยก
สรุปจากการศึกษานะครับ
เมื่อ 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 ข้างหน้า
-- coding: utf-8 --
print len((u’aก’).decode(‘utf-8’))
ได้มั๊ยครับ
ภาษาไทยใน utf-8 = 3 ตัว ดังนั้นต้องเอาไปหาร 3 ครับ แต่ เนื่องจาก space และ a ไม่ใช่ภาษาไทย เจอ space ตัวเดียวนับผิดเลยครับ ดังนั้นควรจะเป็น
print len(u'aก')
แค่นี้พอครับ แล้วจะเข้าเข้ารหัสอะไรก็ค่อยไปทำหลัง len / เก็บไว้ตัวแปรอื่นครับ
ลอง print len(u‘aก’) ได้ผลถูกต้องตามที่ต้องการแล้วครับ
ขอบคุณมากครับ
print (u' aก').encode('utf8')
สรุปจากการศึกษานะครับ
เมื่อ 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 ข้างหน้า