有人可以請我提供一些重要的方面,我應該知道在處理C#中的Unicode字符串?在C#中處理Unicode字符串的最佳做法是什麼?
回答
C#(和.Net一般)透明地處理unicode字符串,除非應用程序需要使用特定的編碼讀/寫文件,否則不必做任何特殊的操作。在這些情況下,可以使用System.Text.Encodings命名空間中的類將託管字符串轉換爲所選編碼的字節數組。
只有在讀寫流時才考慮編碼。使用TextReader和TextWriters以不同的編碼讀寫文本。如果您有選擇,請始終使用utf-8。
不要被語言和文化混淆 - 這與unicode完全不同。
.net對i18n的支持比較好。你並不需要像unicode那樣思考unicode,因爲所有.Net字符串和內置的字符串函數都可以用unicode做正確的事情。唯一要記住的是,大多數字符串函數(例如DateTime.ToString())默認使用線程的文化,默認情況下是Windows文化。您可以在當前線程或每次方法調用中指定不同的區域性格式。
唯一的時間unicode是一個問題是當編碼/解碼字節和字節。
請記住,C#字符串是Char,UTF-16代碼單元的序列。它們是而不是 Unicode代碼點。某些unicode代碼點需要兩個字符,並且不應該在這些字符之間拆分字符串。
此外,unicode代碼點可以組合形成單一語言的「字符」 - 例如,'u'Char,然後是umlat Char。所以你不能在任意代碼點之間拆分字符串。
基本上,這是混亂的問題,任何給定的問題可能只會在實踐中影響你不知道的語言。
如前所述,.NET字符串透明地處理Unicode。除了文件I/O之外,其他考慮因素將在數據庫層。 SQL Server實例區分VARCHAR(非Unicode)和NVARCHAR(處理unicode)。還需要注意存儲過程參數。
System.String已經在內部處理了unicode,因此您在那裏覆蓋。最佳做法是在讀取和寫入文件時使用System.Text.Encoding.UTF8Encoding。它不僅僅是讀/寫文件,而是包括網絡連接在內的任何流式數據都將取決於編碼。如果你使用的是WCF,那麼對於大多數綁定,它將默認爲UTF8(實際上大多數情況下根本不允許使用ASCII)。
UTF8是一個不錯的選擇,因爲雖然它仍然支持整個Unicode字符集,但對於大多數ASCII字符集,它具有字節相似性。因此,不支持Unicode的幼稚應用程序有一些讀取/寫入應用程序數據的機會。當您開始使用擴展字符時,這些應用程序纔會開始失敗。
System.Text.Encoding.Unicode將寫入每個字符至少兩個字節的UTF-16,使其變得更大並且與ASCII完全不兼容。正如你所猜測的,System.Text.Encoding.UTF32仍然較大。我不確定UTF-16和32的真實世界用例,但是當您擁有大量擴展字符時,它們的性能可能會更好。這只是一個理論,但如果這是真的,那麼製作將主要用於這些語言的產品的日本/中國開發人員可能會發現UTF-16/32是更好的選擇。
- 1. 在C++下處理Unicode字符串的最佳多平臺方式是什麼?
- 2. 什麼是在C#中的文件處理的最佳做法?
- 3. 在php字符串中替換unicode字符的最佳方法是什麼?
- 4. 在WinForm中處理CheckBox控件的最佳做法是什麼?
- 5. 在Unity中處理基類的最佳做法是什麼
- 6. 在R中處理時間的最佳做法是什麼?
- 7. 在c#中處理圖像對象的最佳做法是什麼?
- 8. 處理重複方法調用的最佳做法是什麼?
- 9. 處理LinqToSql中可空字符串列的最佳方法是什麼?
- 10. 在C++中創建支持Unicode和ASCII的庫的最佳做法是什麼?
- 11. REST api管理字段的最大字符數的最佳做法是什麼?
- 12. 從字符串中可靠地刪除unicode的最佳方法是什麼
- 13. 處理格式不正確的JSON字符串的最佳方法是什麼?
- 14. 刪除部分字符串的最佳方法是什麼? (C#)
- 15. 處理聯繫表單的最佳做法是什麼?
- 16. 處理應用程序配置的最佳做法是什麼?
- 17. 處理內存不足錯誤的最佳做法是什麼?
- 18. 處理文件和路徑的最佳做法是什麼?
- 19. 處理重複瓶子的最佳做法是什麼
- 20. WPF ValueConverter錯誤處理的最佳做法是什麼?
- 21. 處理CSS margin/padding「衝突」的最佳做法是什麼?
- 22. 在Orchard CMS中覆蓋字符串的最佳做法是什麼?
- 23. 清理Unicode輸入的最佳做法
- 24. 什麼是處理在Windows窗體應用程序連接字符串的最佳方法是什麼?
- 25. 在RxScala中管理訂閱的最佳做法是什麼?
- 26. 在Laravel中處理空的雄辯查詢的最佳做法是什麼?
- 27. 在C#中聲明變量的最佳做法是什麼?
- 28. 在C中清空char字符串的最佳方法是什麼?
- 29. 在ObjC/C中隱藏/加密字符串的最佳方法是什麼?
- 30. 在C#中,將字符串格式化爲XML的最佳方法是什麼?