在.NET中,一個字符串是一個unicode字符串。我的理解是字符串本身不包含任何特定的編碼信息,即編碼是否中性?只要編碼方法與解碼方法相匹配,您可以使用任何編碼方法將字符串解碼爲字節流,然後將字節流編碼爲可識別的字符串?是(unicode)字符串編碼中性嗎?
回答
是的,許多編碼方案不能容納所有Unicode碼點,這使得一些往返行程不具有冪等性。
.NET中的「Unicode」是UTF-16或UCS-2(2字節)。它本身就是完整Unicode字符集的編碼,它需要32位(4字節,UCS-4)來保存所有字符。因此,您可以按原樣序列化這些字節,並且它們將在任何支持UTF-16的系統上進行恢復,這些系統將正確地反序列化它們。
.Net字符串由UTF-16字符組成。沒有「Unicode字符串」這樣的東西。它可以是UCS2或UCS4字符串,或UTF-7,UTF-8,UTF-16等各種轉換格式,但不能稱其爲「Unicode」。理解它們之間的區別很重要。
我知道.Net團隊中有人調用Encoding類「Unicode」的屬性,但它是一個錯誤。而且這個類還包含「默認」屬性,這是另一個錯誤的屬性。這導致了許多缺陷(大多數人不閱讀手冊,他們根本沒有意識到「Unicode」是UTF-16,「Default」是默認的OS代碼頁)。
至於你的問題的第二部分,答案不幸的是沒有。這將是「是」,但有一個小問題。它是GB18030編碼 - 中國PRC的標準編碼。它已經分配了Unicode標準中尚不存在的代碼點(尚未)。 Unicode標準的新版本可能會解決此問題。
這裏的一個重點(返回到UTF-16)是字節對轉換沒有必要。問題與代理對有關,您必須小心,因爲一個字符可以由兩個對定義,即四個字節。
如果你不在意支持GB18030編碼,你可以使用你提到的方法。如果碰巧你想在中國銷售你的軟件,你需要支持它,當然你必須非常小心(需要進行大量的測試)。
嗨,謝謝澄清我的一個長期問題(UnicodeEncoding和UTF8Encoding有什麼區別)。那麼Unicode = UTF-16和UTF-8 = UTF-8? – Aperture 2010-10-17 09:22:52
在GB18030編碼的情況下,您的意思是它定義的代碼點在16位UNICODE標準中甚至在32位UNICODE/ISO 10646標準中沒有任何coutnerparts? – 2010-10-17 09:23:49
@Ondrey:從一個角度來說,我的意思是說GB18030比ISO 10646定義了更多的代碼點,所以沒有辦法轉換這些附加的代碼點。但是我聽說GB18030:2005指定了一些在Unicode 5.1中沒有等值的字形。我錯了嗎? – 2010-10-17 09:32:45
- 1. 是Django雙重編碼一個Unicode(utf-8?)字符串嗎?
- 2. 不能夠編碼的Unicode字符串
- 3. C++字符串編碼UTF8/unicode的
- 4. SQL Unicode轉換編碼VARBINARY字符串
- 5. iOS編碼字符串到unicode
- 6. 字符串與Unicode編碼 - Struct()參數
- 7. Python使用unicode編碼的字符串
- 8. Python的編碼在Unicode字符串
- 9. M2Crypto RSA Unicode字符串編碼不同於字節字符串
- 10. 將url編碼的字符串轉換爲python unicode字符串
- 11. 如何將Unicode編碼的字符串轉換爲字符串
- 12. 在Python unicode字符串中處理錯誤編碼的字符
- 13. 使用轉義Unicode編碼解碼字符串(5個字符)
- 14. Url Unicode字符編碼
- 15. Unicode代碼字符串
- 16. 寬字符字符串文字是用UTF-16LE編碼的嗎?
- 17. ResultSet getString字符編碼的Unicode字符
- 18. 什麼是unicode字符串?
- 19. 編碼Unicode字符到HTML中的Qt
- 20. 在iOS中解碼unicode字符串
- 21. python的字符串是unicode字符
- 22. PHP concatenate字符與Unicode編碼的字符編碼
- 23. 解碼和編碼Unicode字符爲「\ü####」
- 24. Unicode字符打破JSON編碼/解碼
- 25. Perl:解碼「亂碼」Unicode字符串
- 26. 將Unicode鍵碼解碼爲字符串
- 27. 如何Unicode編碼字符變量轉換爲Unicode字符python2
- 28. Unicode字符串
- 29. Unicode字符串
- 30. 在python 2.7中將錯誤編碼爲unicode字符串?
嗨我用中文編碼方案「Encoding.GetEncoding(936)」和StreamWriter類寫一箇中文字符串到.txt文件中。爲什麼記事本程序可以正確顯示字符,即使我沒有指定記事本程序使用哪種編碼?我知道有一個自動字節標記檢測,但我不認爲它可以自動檢測一個奇特的編碼方案? – Aperture 2010-10-17 09:17:55
@孔徑:記事本將一些啓發式算法應用於文件的開頭,以計算編碼。如果通常得到正確的結果,但有可能愚弄它。 [詳見Michael Kaplan的博客。](http://blogs.msdn.com/b/michkap/archive/2007/04/22/2239345.aspx) – Richard 2010-10-17 09:54:32
@Richard:Bravo!這裏充滿了知識淵博的人! – Aperture 2010-10-17 11:28:31