簡體   English   中英

強制wchar_t為4個字節

[英]compelling wchar_t to be 4 bytes

實際問題-我正在研究一個可以在2個單獨的硬件平台上運行的小應用程序。

編譯方法及其配置由我定義和控制。

我的應用程序收到UTF-8 / ISO-8859文本,並且應該對字符串執行一些基本操作(復制,搜索等)。

問題是,一個編譯器是GCC(sizeof(wchar_t)== 4),而另一個是Mingw(sizeof(wchar_t)== 2)。

為了支持所有UTF-8可能性,我認為代碼中wchar_t中的“ typedef”類型為uint32_t,因此將迫使Mingw編譯器在同一行上,並覆蓋所有UTF-8選項。

然后,我打算使用標准庫(mbstowcs,wcscmp,wcscpy等)提供的寬字符操作功能。

問題是,是否會“迫使”編譯器使用更多空間,可能會對庫功能產生一些不良影響(除了性能)(更改后mbtowcs甚至可以在這里工作嗎?)

我嘗試使用ICU,但這是一個非常大的庫,因此無法達成協議。 我需要它小巧可靠。

謝謝

這是用於字符串操作的選項:

  1. 使用unsigned char (或char )和UTF-8。 所有常規的字符串操作函數均起作用(例如strlen()strstr()snprintf()等)。

  2. 在不同的平台上使用wchar_t並使用不同的編碼(Win32使用UTF-16,OS X和Linux使用UTF-32)。 這是一條瘋狂的路,因為您必須在同一代碼庫中支持兩種不同的編碼。

  3. 使用UTF-32或UTF-16和您自己的字符串操作函數。 這是很多工作,但是是可移植的。

  4. 使用ICU和UTF-16。

在大多數情況下,以UTF-8操作字符串非常有效。 這取決於您的程序做什么。 如果您正在執行諸如解析和模板化之類的工作,那么UTF-8便很容易使用。 如果您需要更復雜的功能(例如遍歷斷點或查找字素簇邊界),則需要一個庫,例如Glib(使用UTF-8)或ICU(使用UTF-16)。

關於索引的注釋

您可能習慣於使用字符/代碼點索引來為字符串編制索引。 習慣於使用代碼單元索引為字符串建立索引:所以strlen()返回字節而不是字符數。 但是,實際上很少需要按字符位置索引字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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