2012-06-01 35 views
4

我意識到我的程序必須能夠處理特殊字符,如日語或中文。但我知道內置的char遠遠不夠。那麼如何在C程序中使用這些特殊字符呢?如何在C中使用特殊字符?

+4

[絕對最低每一個軟件開發人員絕對,積極必須知道的關於Unicode和字符集(沒有藉口!)](http://www.joelonsoftware.com /articles/Unicode.html)。 –

回答

2

您需要使用wide characters的wchar_t的。它們是你所需要的Unicode的一部分,它們可以使用幾乎每個字符都可以工作,並且可以這樣做,因爲 - 這就是問題所在:它消耗更多的字節(兩倍多;這聽起來很噸,但大多數情況下並不是)。

注意: 在Windows編程中,您使用TEXT("")宏來選擇您的字符是Unicode還是ANSI。它會根據您的項目設置進行選擇。
如果硬要將它的Unicode您可以用L信像這樣的前綴寫入字符串:L"Unicode String"

頭文件與寬字符的工作是wchar.h

+0

setlocale(LC_ALL,「」);這條線是做什麼的? – OneZero

+0

@ user1229490下面是一個參考:http://www.cplusplus.com/reference/clibrary/clocale/setlocale/ – MasterMastic

+0

不要忘記考慮utf-8。這樣你就不需要寬字符。 – Matt

2

對Unicode類型的語言,你可以改用炭

+0

我需要任何頭文件嗎?有什麼需要注意的嗎? – OneZero

+0

是的,你需要非常清楚你正在使用wchar_t,還有一個豐富的函數庫等,像wstring等。你將需要查看文檔,以便你瞭解如何處理它們,如何聲明字符串文字等。 –

4

如果您可以忍受一個字節!=一個Unicode字符的情況,那麼您可以使用UTF-8編碼。

+1

UTF-8與Unicode相同嗎? – OneZero

+0

它使用相同的unicode字符表。 UTF8使用可變長度編碼。每個PHP開發人員都必須處理這個btw;) – mazatwork

+0

@ user1229490 UTF-8是對Unicode的編碼。 – MasterMastic

5

像這樣在Windows VS :)

#include <tchar.h> 
typedef struct _我的結構{ 
    int 數據; 
    TCHAR 字符串指針[100]; 
}我的結構; 
int main(int argc,char** argv){ 
    我的結構 我的變量 = {1, _T("字符串123abc")}; 
    _tprintf(_T("%s, %d"),我的變量.字符串指針,我的變量.字符串指針); 
    return 0; 
} 
+0

最佳答案。 – chris