簡體   English   中英

C ++項目類型:Unicode與多字節; 利弊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM