2016-09-19 24 views
0

我知道如果我在vs中使用unicode字符集,我可以使用L"There is a string"來呈現unicode字符串。當vs進行詞法分析時,我認爲There is a string將從srouce文件中讀取,它會將There is a string解碼爲來自源文件編碼的unicode。visual studio如何解析來自不同編碼源文件的unicode字符串?

我已將源文件更改爲某些不同的編碼,但我總是從L marco獲得正確的unicode數據。劑量與檢測源文件的編碼來隱藏There is a string來糾正unicode?如果不是,VS如何實現這一目標?

我不確定這個問題是否可以在SO中提出,如果不是,我應該問哪裏?提前致謝。

+0

什麼 「不同編碼」 你試試? AFAIK,沒有字節順序標記字符的文件默認爲「ANSI」(本地化的編碼...美國的Windows是cp1252,但它因地區而異),否則,[BOM](https://en.wikipedia.org/ wiki/Byte_order_mark)字符作爲文件中的第一個代碼點標識一個UTF編碼。 –

+0

@MarkTolonen我試過GB2312,UTF-8。那麼vs會檢測文件編碼來隱藏unicode?是否有一些文件編碼與不支持做這種轉換? – zzy

+0

您使用的是什麼本地化版本的操作系統?對於中文,GB2312可能是ANSI編碼。我期望其他本地化失敗或至少損壞字符,因爲Windows不會將任何編碼指示添加到文件,並將採用當前的ANSI編碼。但是,UTF編碼文件由VS編寫,以BOM字符開頭,該字符具有不同的UTF編碼的特定簽名。 –

回答

1

VS將不會在源文件開始時檢測到沒有BOM簽名的編碼。如果沒有BOM存在,它將假設本地化的ANSI編碼。

BOM簽名標識使用的UTF8/16/32編碼。因此,如果您將某些內容保存爲UTF-8(VS將添加BOM)並刪除前3個字節(EF BB BF),則該文件將在美國Windows上解釋爲CP1252,而在中文Windows上解釋爲GB2312等。

你是在中國的Windows上,所以要麼保存爲GB2312(不含BOM)或UTF8(含BOM),以便VS正確解碼你的源代碼。

https://en.wikipedia.org/wiki/Byte_order_mark

相關問題