แนวทางปฏิบัติที่ดีที่สุดของการประมวลผล Unicode ใน C ++ คืออะไร?
แนวทางปฏิบัติที่ดีที่สุดของการประมวลผล Unicode ใน C ++ คืออะไร?
คำตอบ:
is_alpha
เว้นแต่จะเป็นคำจำกัดความที่คุณต้องการstring
ถ้าคุณสนใจเกี่ยวกับความถูกต้องให้ใช้ไลบรารี Unicode ของคุณสำหรับสิ่งนี้เสมอหากคุณไม่สนใจเกี่ยวกับความเข้ากันได้ย้อนหลังกับมาตรฐาน C ++ ก่อนหน้ามาตรฐาน C ++ 11 ในปัจจุบันได้สร้างขึ้นในการรองรับ Unicode: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
ดังนั้นแนวทางปฏิบัติที่ดีที่สุดสำหรับการประมวลผล Unicode ใน C ++ คือการใช้สิ่งอำนวยความสะดวกในตัว นั่นไม่ได้เป็นไปได้เสมอไปสำหรับฐานรหัสรุ่นเก่า แต่ด้วยมาตรฐานเป็นสิ่งใหม่ในปัจจุบัน
แก้ไข: เพื่อความชัดเจน C ++ 11 คือ Unicode ทราบว่าขณะนี้มีการรองรับตัวอักษร Unicode และสตริง Unicode แล้ว อย่างไรก็ตามไลบรารีมาตรฐานมีการสนับสนุนที่ จำกัดสำหรับการประมวลผลและการแปลง Unicode เท่านั้น สำหรับความต้องการในปัจจุบันของคุณอาจเพียงพอแล้ว อย่างไรก็ตามหากคุณจำเป็นต้องทำการยกของหนักจำนวนมากในตอนนี้คุณอาจต้องใช้ICUเพื่อประมวลผลในเชิงลึกมากขึ้น ขณะนี้มีข้อเสนอบางอย่างในการทำงานเพื่อรวมการสนับสนุนที่มีประสิทธิภาพมากขึ้นสำหรับการแปลงข้อความระหว่างการเข้ารหัสต่างๆ ฉันเดา (และหวังว่า) เป็นที่ว่านี้จะเป็นส่วนหนึ่งของถัดไปรายงานทางเทคนิค
บริษัท ของเรา (และอื่น ๆ ) ใช้ไลบรารีInternation Components สำหรับ Unicode (ICU) แบบโอเพนซอร์สที่พัฒนาโดย Taligent
จัดการกับสตริงสถานที่การแปลงวันที่ / เวลาการเรียงลำดับการแปลงและอื่น ๆ อัล
เริ่มต้นด้วย ICU Userguide
นี่คือรายการตรวจสอบสำหรับการเขียนโปรแกรม Windows:
ดู การเปรียบเทียบสตริงที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ใน C ++
คำถามนั้นมีลิงก์ไปยังเอกสารของ Microsoft เกี่ยวกับ Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
หากคุณดูทางด้านซ้ายมือของการนำทางของ MSDN ถัดจากบทความนั้นคุณจะพบข้อมูลมากมายเกี่ยวกับฟังก์ชัน Unicode เป็นส่วนหนึ่งของบท "Encoding Characters" ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )
มีส่วนย่อยดังต่อไปนี้:
แม้ว่านี่อาจไม่ใช่แนวทางปฏิบัติที่ดีที่สุดสำหรับทุกคน แต่คุณสามารถเขียนกิจวัตร C ++ UNICODE ของคุณเองได้หากต้องการ!
ฉันเพิ่งทำเสร็จในช่วงสุดสัปดาห์ ฉันได้เรียนรู้มากมายแม้ว่าฉันจะไม่รับประกันว่ามันไม่มีบั๊ก 100% แต่ฉันได้ทำการทดสอบหลายครั้งและดูเหมือนว่าจะทำงานได้อย่างถูกต้อง
รหัสของฉันอยู่ภายใต้ใบอนุญาต BSD ใหม่และสามารถพบได้ที่นี่:
http://code.google.com/p/netwidecc/downloads/list
เรียกว่า WSUCONV และมาพร้อมกับโปรแกรม main () ตัวอย่างที่แปลงระหว่าง UTF-8, UTF-16 และ Standard ASCII หากคุณทิ้งรหัสหลักไปคุณจะมีห้องสมุดที่ดีสำหรับการอ่าน / เขียน UNICODE
ดังที่ได้กล่าวไปแล้วข้างต้นห้องสมุดเป็นทางออกที่ดีที่สุดเมื่อใช้ระบบขนาดใหญ่ อย่างไรก็ตามบางครั้งคุณต้องการจัดการสิ่งต่างๆด้วยตนเอง (อาจเป็นเพราะไลบรารีจะใช้ทรัพยากรจำนวนมากเช่นในไมโครคอนโทรลเลอร์) ในกรณีนี้คุณต้องการไลบรารีแบบธรรมดาที่คุณสามารถคัดลอกส่วนต่างๆออกจากสิ่งที่คุณต้องการได้จริง
รหัสตัวอย่างของ Willow Schlanger ดูเหมือนจะดี (ดูคำตอบของเขาสำหรับรายละเอียดเพิ่มเติม)
ฉันยังพบอีกอันที่มีรหัสเล็กกว่า แต่ขาดการตรวจสอบข้อผิดพลาดทั้งหมดและจัดการเฉพาะ UTF-8 แต่ง่ายกว่าที่จะนำบางส่วนออก
นี่คือรายการของไลบรารีแบบฝังที่ดูดี
ใช้International Componentsของ IBM สำหรับ Unicode
ดูคำแนะนำของUTF-8 ทุกที่
string
เป็นข้อมูลไบนารี