在C#中,Unicode編碼和解碼是處理字符串和字符數據的基礎操作之一。Unicode是一種字符編碼標準,它為世界上幾乎所有的字符集提供了唯一的數字表示。C#中的字符串類型string
默認使用UTF-16編碼,這意味著每個字符通常由16位(2字節)表示。本文將介紹如何在C#中實現Unicode編碼和解碼。
Unicode編碼是將字符轉換為對應的Unicode碼點的過程。在C#中,可以使用char
類型來表示單個Unicode字符,并使用int
類型來表示Unicode碼點。
char ch = 'A';
int unicode = (int)ch;
Console.WriteLine($"字符 '{ch}' 的Unicode碼點是: {unicode}");
輸出:
字符 'A' 的Unicode碼點是: 65
string str = "Hello, 世界!";
foreach (char ch in str)
{
int unicode = (int)ch;
Console.WriteLine($"字符 '{ch}' 的Unicode碼點是: {unicode}");
}
輸出:
字符 'H' 的Unicode碼點是: 72
字符 'e' 的Unicode碼點是: 101
字符 'l' 的Unicode碼點是: 108
字符 'l' 的Unicode碼點是: 108
字符 'o' 的Unicode碼點是: 111
字符 ',' 的Unicode碼點是: 44
字符 ' ' 的Unicode碼點是: 32
字符 '世' 的Unicode碼點是: 19990
字符 '界' 的Unicode碼點是: 30028
字符 '!' 的Unicode碼點是: 33
Unicode解碼是將Unicode碼點轉換回字符的過程。在C#中,可以使用char.ConvertFromUtf32
方法將Unicode碼點轉換為字符串。
int unicode = 19990; // '世' 的Unicode碼點
string ch = char.ConvertFromUtf32(unicode);
Console.WriteLine($"Unicode碼點 {unicode} 對應的字符是: {ch}");
輸出:
Unicode碼點 19990 對應的字符是: 世
int[] unicodePoints = { 72, 101, 108, 108, 111, 44, 32, 19990, 30028, 33 }; // "Hello, 世界!" 的Unicode碼點
string str = string.Concat(unicodePoints.Select(p => char.ConvertFromUtf32(p)));
Console.WriteLine($"Unicode碼點對應的字符串是: {str}");
輸出:
Unicode碼點對應的字符串是: Hello, 世界!
雖然C#中的字符串默認使用UTF-16編碼,但在處理外部數據(如文件、網絡數據)時,可能會遇到UTF-8編碼的數據。C#提供了Encoding
類來處理不同編碼的轉換。
string str = "Hello, 世界!";
byte[] utf8Bytes = Encoding.UTF8.GetBytes(str);
Console.WriteLine($"UTF-8 編碼的字節數組: {BitConverter.ToString(utf8Bytes)}");
輸出:
UTF-8 編碼的字節數組: 48-65-6C-6C-6F-2C-20-E4-B8-96-E7-95-8C-21
byte[] utf8Bytes = { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0xE4, 0xB8, 0x96, 0xE7, 0x95, 0x8C, 0x21 };
string str = Encoding.UTF8.GetString(utf8Bytes);
Console.WriteLine($"解碼后的字符串: {str}");
輸出:
解碼后的字符串: Hello, 世界!
在C#中,Unicode編碼和解碼是處理字符串和字符數據的基礎操作。通過使用char
類型、int
類型以及Encoding
類,可以輕松實現Unicode字符與碼點之間的轉換,以及處理不同編碼格式的數據。掌握這些操作對于處理多語言文本、文件讀寫、網絡通信等場景非常重要。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。