[英]No mapping for the Unicode character in target multi-byte code page C++
[英]C++ project type: unicode vs multi-byte; pros and cons
我想知道Stack Overflow社區在創建帶有Unicode或多字節字符集的項目(這里主要考慮C ++)時會怎么想。
從一開始就直接使用Unicode是否有好處,這意味着您所有的字符串都將采用寬格式? 是否由於標准使用大字符而存在性能問題/更大的內存需求?
這種方法有優勢嗎? 某些處理器體系結構是否可以更好地處理寬字符?
如果您不打算支持其他語言,是否有任何理由使您的項目成為Unicode?
創建具有多字節字符集的項目會有什么原因?
以上所有因素如何在高性能環境(例如現代視頻游戲)中發生沖突?
我要評論兩個問題。
首先,您沒有提及您要定位的平台。 盡管最近的Windows版本(Win2000,WinXP,Vista和Win7)都支持使用字符串的系統調用的多字節和Unicode版本,但Unicode版本的速度更快(多字節版本是包裝器,它們可以轉換為Unicode,調用Unicode版本,然后轉換返回的任何內容)字符串返回mutlibyte)。 因此,如果您要進行許多此類調用,則Unicode將更快。
僅僅因為您不打算明確支持其他語言,如果您的應用程序保存並顯示用戶輸入的文本,您仍然應該考慮支持Unicode。 僅僅因為您的應用程序是非語言的,並不意味着它的所有用戶也都是非語言的。 他們可能會很樂意使用您的英語GUI,但可能想以自己的語言輸入名稱,注釋或其他文本並正確顯示它們。
您在這里談論的是VC ++項目設置,對嗎?
唯一會影響的是Win32 API調用的版本,最終被執行。 例如,要呼叫MessageBox
最終將成為一個呼叫MessageBoxA
在多字節設置的情況下,與MessageBoxW
在統一設置的情況下。 當然,這也會影響該函數的字符串參數的類型。 在內部, MessageBoxA
在將字符串參數從當前系統區域設置轉換為Unicode之后,調用MessageBoxW
。
我的建議是使用Unicode設置,並將Unicode字符串傳遞給Win32 API調用。 這不會阻止您在內部使用任何其他編碼形式的字符串。
簡短的答案(IMO,我一直被證明是錯誤的)是最好計划更糟的情況(或最好根據您的觀點而定)並立即執行unicode。
除非您的應用程序非常密集地使用字符串,否則直接進入unicode並不重要。 就游戲而言,與引擎的其余部分相比,這並不是一個大因素。
最高
這是一個簡單的考慮:如果程序被菅直人先生使用,您的程序應該可以工作嗎? 他的主目錄可能很難用ASCII表示。
從一開始就直接使用Unicode是否有優勢,
幾年和一百萬行代碼之后,您希望您回答“是”。
意味着您所有的字符串都將采用寬格式?
我希望Microsoft退出將“ Unicode”與UTF-16混淆。
您不必以寬格式存儲所有字符串。 您可以改用UTF-8,並獲得較小的內存占用(對於拉丁字母語言),並與7位ASCII向后兼容。
在Windows上使用UTF-8的一個缺點是它不作為ANSI代碼頁支持,因此您必須將字符串轉換為UTF-16才能進行WinAPI調用。 造成不便的程度取決於您正在編寫Windows程序還是恰好在Windows上運行的程序。
該問題的第一個答案應該是……回答您需要知道的所有內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.