2010-11-24 100 views
0

請指定Windows和Linux機器之間是否存在表示差異(,如std :: wstring在Linux中佔用4個字節,在Windows中爲2個字節,在中佔用2個字節)。
如果需要,還請指定字節順序。您可以編寫「U + 9FA5(龥)」和「U + 0041(A)」unicode字符的UTF-8,UTF-16和std :: wstring表示嗎?

+0

你是什麼意思這些已經是Unicode字符。 – 2010-11-24 08:41:19

+1

^我沒有這樣說過。 – hkBattousai 2010-11-24 13:00:36

回答

1

不,我不能。但是this site可以。

+0

我非常好的網站,清楚地說明了UTF-8和UTF-16的二進制代碼。加上馬丁約克這個事實,std :: wstring只是一個容器類型,我的問題得到了回答。 – hkBattousai 2010-11-24 13:04:59

0

這是你想要的東西:

int main() 
{ 
    std::wstring data1 = L"U+9FA5 (\0x9FA5)"; 
    std::wstring data2 = L「U+0041 (A)"; 
} 

的wstring的只是wchar_t的對象的容器。
沒有暗示的字符編碼(它只是存儲你把它放在什麼地方)。

Windows wchar_t目前是2個字節,所以它可能只能存儲UTF-16字符。 Linus wchar_t通常是4個字節。所以它可以使用UTF-16或UTF-32編碼。雖然這是最常見的情況,但這些重疊和上半部分都是零(當然,例外情況是代碼點不在BMP或代理對上)。

注意:UTF-8字符通常不在內部使用(雖然它們可以)在應用程序中,因爲它們不是固定寬度。但由於它的可壓縮性,它對於傳輸和存儲非常有用(並且與ASCII的向後兼容性不會受到影響)。

注意:C/C++不排除其字符串使用其他編碼格式。

+0

UTF-8 *在GNOME(glib)中內部使用,我認爲glib是完全正常的。此外,Win32使用UTF-16,這是不固定的。 – upriser 2010-11-24 09:04:26

1

UTF-16BE是MS Office系列產品中使用的代碼頁,它將所有字符存儲爲2個字節,並且與Unicode字符集的「標準」部分非常相似。

Linux可能使用utf-8將標準ASCII字符存儲在單個字節中,但可能會根據unicode代碼點將其他Unicode字符存儲在兩個,三個或四個字節中。由於最左邊的位用標誌佔據,表示它不是ascii,以及你是多遠字符還是多遠。 (這個想法是你可以跳到一個隨機字節的utf-8字符串,並能夠找到你所在的字符的開頭。)

對於大多數具有高代碼點的遠東字符集以unicode爲單位(由Java使用)通常在空間和處理時間上比UTF-8更有效。

相關問題