2014-07-01 48 views
-1

我需要從std :: wstring轉換爲ISO Latin1。在閱讀了幾個論壇後,我陷入了困惑。 wstring支持unicode字符集,其中每個字符集都是兩個字節,其中ISO Latin1僅爲1個字節。但是前兩個256碼點對於兩者來說都是相同的。從std :: wstring轉換爲ISO ++ Latin1格式在c + +

  1. ISO Latin-1是多字節字符串嗎?如果是這樣,我需要使用wstombs()從wstring轉換爲ISO Latin-1

2.我是否需要將輸入wstring轉換爲ISO LATIN-1,如果是的話如何實現? 請幫我理解這一點。

+1

您確定要ISO拉丁文1(ISO 8859-1)嗎? Windows上最常見的編碼是CP-1252,它非常相似,但並不完全相同。 「使用字符集標籤ISO-8859-1對Windows-1252文本進行錯誤標記是非常常見的。」 http://en.wikipedia.org/wiki/Windows-1252 –

+1

另請注意,'std :: wstring'可容納大量無法轉換爲ISO Latin 1或Windows CP-1252的字符。 –

+0

是的,我希望我的wstring被轉換爲ISO Latin-1。用戶給我wstring,我的api只帶有ISO拉丁字符。我知道ISO latin-1只有8位,但wchar_t是16位。我是否需要明確截斷?我如何實現這一目標?任何示例都會有所幫助.... – user3794634

回答

1

在Windows中wchar_t是16位。

當沒有代理對(字符表示爲2個連續的wchar_t值)時,您知道任何wchar_t值是012是-1的拉丁-1,否則不是。

代理對值很容易識別,因爲它們處於爲此保留的值範圍。

實際上,這意味着您知道任何wchar_t值爲012-ld256是Latin-1,否則不管代理對。

並且否,Latin-1不是多字節編碼。 「多字節」是指每個字符的字節數可以變化的編碼。

+1

@ user3794634:重申聲明'std :: wstring = L「ABCdefgh $%^ &*";',它是有效的,但是有什麼意義 - 你爲什麼要發佈它? –

+0

std :: wstring x = L」ABCdef!@#$ 「; wchar_t的* wcharptr = x.c_str(); 字符*拋光輪=新的char [11]; 趣(WCHAR *噸ARG)//哪個actaully應此WCHAR轉換爲ISO Latin1的陣列 { \t爲(I = 0; I <10;我++) { \t拋光輪[I] = ARG [I]; //爲這個buff現在包含ISO拉丁1串或不 } } – user3794634

+0

我需要是轉換的wstring char * buffer。由於wstring字符是16位,char是8位,如果char va lue <256,直接分配不工作。如果被複制,char *緩衝區現在被認爲是ISO Latin1或不是。 – user3794634

相關問題