Яка найкраща практика обробки 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 ++ було б використання вбудованих засобів для цього. Однак це не завжди можливо із більш старими базами коду, при цьому стандарт є таким новим в даний час.
EDIT: Для уточнення, C ++ 11 усвідомлює Unicode тим, що тепер він підтримує літерали Unicode та рядки Unicode. Однак стандартна бібліотека має лише обмежену підтримку для обробки та перетворення Unicode. Для ваших поточних потреб цього може бути достатньо. Однак якщо вам зараз потрібно зробити велику кількість важкого підйому, можливо, вам все ж доведеться використовувати щось на зразок ІКУ для більш глибокої обробки. Є кілька пропозицій в даний час в роботах , щоб включати більш надійну підтримку для перетворення тексту між різними кодуваннями. Думаю (і сподіваюся), що це буде частиною наступного технічного звіту .
Наша компанія (та інші) використовують інтернаціональні компоненти з відкритим кодом для Unicode бібліотеку бібліотеки (ICU), оригінально розроблену Taligent.
Він обробляє рядки, локалі, перетворення, дату / час, зіставлення, перетворення тощо. ін.
Почніть з ICU Userguide
Ось контрольний список для програмування Windows:
Подивіться на порівняння рядків нечутливих випадків у C ++
У цьому питанні є посилання на документацію Microsoft про Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
Якщо ви подивитеся на ліву сторону навігації на MSDN поруч із цією статтею, ви повинні знайти багато інформації, що стосується функцій Unicode. Це частина глави "Кодування символів" ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )
Він має такі підрозділи:
Хоча це може бути не найкращою практикою для всіх, ви можете написати власні підпрограми C ++ UNICODE, якщо хочете!
Я щойно закінчив це робити за вихідні. Я багато чого навчився, хоча не гарантую, що це 100% вільна помилка, я зробив багато тестувань і, здається, працює правильно.
Мій код знаходиться під ліцензією New BSD і його можна знайти тут:
http://code.google.com/p/netwidecc/downloads/list
Він називається WSUCONV і постачається з вибірковою програмою main (), яка перетворює між UTF-8, UTF-16 та Standard ASCII. Якщо ви викинете основний код, у вас є приємна бібліотека для читання / написання UNICODE.
Як було сказано вище, бібліотека - найкраща ставка при використанні великої системи. Однак іноді ви хочете обробляти речі самостійно (можливо, тому що бібліотека використовує багато ресурсів, як на мікроконтролері). У цьому випадку ви хочете просту бібліотеку, з якої можна скопіювати деталі для речей, які вам потрібні.
Приклад коду Віллоу Шлангера здається хорошим (детальніше див. Його відповідь).
Я також знайшов ще один, який має менший код, але йому не вистачає повної перевірки помилок, і він обробляє лише UTF-8, але простіше було брати деталі.
Ось список вбудованих бібліотек, які здаються пристойними.
Використовуйте міжнародні компоненти IBM для Unicode
Погляньте на рекомендації UTF-8 скрізь
string
як бінарні дані.