首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 程式設計總結(十):字元編碼轉換與常見編碼處理技巧

     編輯:關於C#

前言

在實際開發中,為了滿足傳輸、儲存或顯示等特殊需求,字元資料常需依據特定規則進行轉碼。本文將系統整理 C# 中常見的字元轉碼場景,包含字串編碼轉換、HTML 編碼、URL 編碼、Base64 編碼以及位元組陣列與字串的互轉,並提供可直接參考的程式碼範例。

一、字串編碼轉換

根據來源編碼與目標編碼進行轉換,但需注意編碼不匹配可能導致亂碼。以下方法示範如何在不同編碼間轉換字串:

/// <summary>
/// 字串編碼轉換
/// </summary>
/// <param name="srcEncoding">原編碼</param>
/// <param name="dstEncoding">目標編碼</param>
/// <param name="srcStr">原字串</param>
/// <returns>轉換後字串</returns>
public static string TransferEncoding(Encoding srcEncoding, Encoding dstEncoding, string srcStr) {
    byte[] srcBytes = srcEncoding.GetBytes(srcStr);
    byte[] bytes = Encoding.Convert(srcEncoding, dstEncoding, srcBytes);
    return dstEncoding.GetString(bytes);
}

測試範例:

input = "歡迎來到轉碼世界!";
result = Transfer.TransferEncoding(Encoding.Default, Encoding.UTF8, input);
// 結果:歡迎來到轉碼世 界!
Console.WriteLine("TransferEncoding 結果:{0}", result);
result = Transfer.TransferEncoding(Encoding.UTF8, Encoding.Default, result);
Console.WriteLine("TransferEncoding 反轉碼結果:{0}", result);
// 結果:歡迎來到轉碼世界 !

二、HTML 編碼與解碼

HTML 編碼將 `<`、`>` 等特殊字元轉換為實體(`&lt;`、`&gt;`),防止在 HTTP 傳輸或頁面嵌入時被誤解析。.NET 提供 `HttpUtility.HtmlEncode/HtmlDecode` 或 `WebUtility` 類別處理。

/// <summary> HTML 編碼 </summary>
public static string HtmlEncode(string html) {
    return HttpUtility.HtmlEncode(html); // 或 System.Net.WebUtility.HtmlEncode(html);
}
/// <summary> HTML 解碼 </summary>
public static string HtmlDecode(string html) {
    return HttpUtility.HtmlDecode(html); // 或 System.Net.WebUtility.HtmlDecode(html);
}

測試範例:

input = "<head>you & me</head>";
result = Transfer.HtmlEncode(input);
// 結果: &lt;head&gt;you &amp; me&lt;/head&gt;
result = Transfer.HtmlDecode(result);
// 結果: <head>you & me</head>

三、URL 編碼與解碼

URL 編碼對特殊字元進行義(如 `<` 變 `%3c`),確保 URL 合法傳輸。預設使用 UTF-8 編碼。

/// <summary> URL 編碼 </summary>
public static string UrlEncode(string url) {
    return HttpUtility.UrlEncode(url);
}
/// <summary> URL 解碼 </summary>
public static string UrlDecode(string url) {
    return HttpUtility.UrlDecode(url);
}

測試範例:

input = "https://www.baidu.com?username=<find>&content=ab c";
result = Transfer.UrlEncode(input);
// 結果:http%3a%2f%2fwww.baidu.com%3fusername%3d%3cfind%3e%26content%3dab+c
result = Transfer.UrlDecode(result);
// 結果:https://www.baidu.com?username=<find>&content=ab c

四、Base64 編碼與解碼

Base64 使用 64 個 ASCII 字元將任意位元組序列重新編碼,常用於 HTTP 環境下的長識別碼傳遞或簡易資料遮蔽。

編碼原理: 以 3 位元組為一組(24 位),拆成 4 組各 6 位,高位補 0 成 8 位,再對應 Base64 字元表。不足 3 位元組時以 `=` 填充。

/// <summary> Base64 編碼 </summary>
public static string ToBase64(string input) {
    byte[] bytes = Encoding.UTF8.GetBytes(input);
    return Convert.ToBase64String(bytes);
}
/// <summary> Base64 解碼 </summary>
public static string FromBase64(string input) {
    byte[] bytes = Convert.FromBase64String(input);
    return Encoding.UTF8.GetString(bytes); // 原文有誤,此處修正為正確解碼
}

測試範例:

input = "Coming from the new world!";
result = Transfer.ToBase64(input);
// 結果:Q29taW5nIGZyb20gdGhlIG5ldyB3b3JsZCE=
result = Transfer.FromBase64(result);
// 結果:Coming from the new world!

五、BitConverter:位元組陣列與十六進位字串互轉

`BitConverter` 類別提供基礎型別與位元組陣列的轉換。常見用法為將位元組陣列轉為以 `-` 分隔的十六進位字串,反之亦然。

/// <summary> 位元組陣列轉十六進位字串 </summary>
public static string BitToString(byte[] bytes) {
    if (bytes == null) return null;
    return BitConverter.ToString(bytes); // 例:43-6F-6D-69...
}
/// <summary> 十六進位字串轉位元組陣列 </summary>
public static byte[] FromBitString(string bitStr) {
    if (bitStr == null) return null;
    string[] sInput = bitStr.Split('-');
    byte[] data = new byte[sInput.Length];
    for (int i = 0; i < sInput.Length; i++) {
        data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
    }
    return data;
}

測試範例:

input = "Coming from the new world!";
result = Transfer.BitToString(Encoding.UTF8.GetBytes(input));
// 結果:43-6F-6D-69-6E-67-20-66-72-6F-6D-20-74-68-65-20-6E-65-77-20-77-6F-72-6C-64-21
result = Encoding.UTF8.GetString(Transfer.FromBitString(result));
// 結果:Coming from the new world!

BitConverter 方法表 執行截圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved