[英]How to convert bitmap 16-bit RGBA4444 to 16-bit Grayscale in C++?
[英]C++ strings: UTF-8 or 16-bit encoding?
我仍在嘗試決定我的(home)項目是否應該使用UTF-8字符串(在必要時使用std :: string和其他特定於UTF-8的函數實現)或一些16位字符串(實現為std: :wstring的)。 該項目是一種編程語言和環境(如VB,它是兩者的結合)。
有一些願望/約束:
目前,我正在使用std :: string,目的是僅在必要時使用UTF-8操作函數。 它需要更少的內存,似乎是許多應用程序正在進行的方向。
UTF-16仍然是一個可變長度的字符編碼(有超過2 ^ 16個unicode代碼點),因此你不能做O(1)字符串索引操作。 如果你做了很多這樣的事情,你就不會在速度上超過UTF-8。 另一方面,如果您的文本包含256-65535范圍內的許多代碼點,則UTF-16的大小可以大幅提升。 UCS-2是UTF-16的變體,它是固定長度的,代價是禁止任何大於2 ^ 16的代碼點。
如果不了解您的要求,我個人會選擇UTF-8。 由於其他人已經列出的所有原因,這是最容易處理的。
說實話,我從來沒有找到任何理由使用UTF-8以外的任何東西。
如果您決定使用UTF-8編碼,請查看此庫: http : //utfcpp.sourceforge.net/
它可能會讓你的生活更輕松。
我實際上已經編寫了一個廣泛使用的應用程序(500萬+用戶),所以每千字節使用的數字相加。 盡管如此,我只是堅持使用wxString。 我已經將它配置為從std :: wstring派生,所以我可以將它們傳遞給期望wstring const&的函數。
請注意,std :: wstring是Mac上的原生Unicode(U + 10000以上的字符不需要UTF-16),因此它使用4個字節/ wchar_t。 這樣做的一大優點是i ++總能讓你成為下一個角色。 在Win32上,只有99.9%的情況屬實。 作為一名程序員,你會明白99.9%是多少。
但如果您不相信,請將函數寫入大寫std :: string [UTF-8]和std :: wstring。 這兩個功能會告訴你哪種方式是精神錯亂。
您的磁盤格式是另一回事。 為了便於攜帶,那應該是UTF-8。 UTF-8中沒有字節順序,也沒有關於寬度的討論(2/4)。 這可能是許多程序似乎使用UTF-8的原因。
稍微不相關的說明,請閱讀Unicode字符串比較和規范化。 或者你最終會遇到與.NET相同的錯誤,在這個錯誤中你可以有兩個變量föö和föö只在(不可見)標准化方面有所不同。
我建議UTF-16用於任何類型的數據操作和UI。 Mac OS X和Win32 API使用UTF-16,對於wxWidgets,Qt,ICU,Xerces等也是如此。 UTF-8可能更適合數據交換和存儲。 見http://unicode.org/notes/tn12/ 。
但無論你選擇什么,我肯定會建議只在必要時使用UTF-8來反對std :: string。
一直使用UTF-16或UTF-8,但不要混合搭配,這就是要求麻煩。
MicroATX幾乎是標准的PC主板格式,大多數能夠支持4-8 GB的RAM。 如果你正在談論picoATX,你可能只限於1-2 GB RAM。 即使這樣,對於開發環境來說也是如此。 由於上面提到的原因,我仍然堅持使用UTF-8,但記憶不應該是你關注的問題。
根據我的閱讀,最好在內部使用16位編碼,除非你的內存不足。 它幾乎適合所有生活語言的一個角色
我也看看ICU 。 如果您不打算使用字符串的某些STL功能,則使用ICU字符串類型可能更適合您。
你考慮過使用wxStrings嗎? 如果我沒記錯的話,他們可以進行utf-8 < - > Unicode轉換,當你必須在UI之間傳遞字符串時,它會變得更容易一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.