ฟังก์ชั่น len(สตริง) ทำไมมัน ส่งค่ามาไม่ถูกนะครับ

tags:
# -*- coding: utf-8 -*-  
print len((u’aก’).encode(‘utf-8’))

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

anu's picture
# -*- coding: utf-8 -*-  
print len((u’aก’).decode(‘utf-8’))

ได้มั๊ยครับ

willwill's picture

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

print len(u‘aก’)

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

preecha13's picture

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

kowito2's picture

print (u’ aก’).encode(‘utf8’)

aยก

preecha13's picture

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

เมื่อ 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 อยู่
    แล้วก็เปรียบเทียบตรงๆ ได้เลย

Site Search

 
Web blognone.com

Poll