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

ASP.NET 頁面亂碼問題完整解決方案:編碼設定、下載檔名、韓文識別

     編輯:關於ASP.NET

ASP.NET 頁面亂碼通常源於請求/回應編碼不一致、檔案下載中文檔名編碼、特殊語系字元識別。本文提供三大場景的標準解決方案。

1. 頁面層級編碼統一

Web.config 全域設定

<system.web>
  <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>

建議統一使用 UTF-8,支援全語系,避免 GB2312/Big5 相容性問題。

單頁面 Meta 標籤

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

2. 檔案下載中文檔名處理

string fileName = "中文報表.pdf";
string encodedName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
Response.AddHeader("Content-Disposition", $"attachment; filename={encodedName}");
  • 必須使用 HttpUtility.UrlEncode 指定 UTF-8 編碼
  • IE/Edge 舊版需 filename*=UTF-8''{encodedName} 格式(RFC 5987)
  • 現代瀏覽器支援 filename="{encodedName}"

3. 韓文字元識別(Unicode 區間判斷)

韓文 Unicode 區間:

  • 諺文兼容字母:U+3130–U+318F (12592–12687)
  • 諺文音節:U+AC00–U+D7A3 (44032–55203)

T-SQL 函數:偵測字串是否含韓文

CREATE FUNCTION dbo.HasKorean(@str NVARCHAR(100))
RETURNS BIT
AS
BEGIN
    DECLARE @i INT = 1, @len INT = LEN(@str), @ch INT;
    WHILE @i <= @len
    BEGIN
        SET @ch = UNICODE(SUBSTRING(@str, @i, 1));
        IF (@ch BETWEEN 12592 AND 12687) OR (@ch BETWEEN 44032 AND 55203)
            RETURN 1;
        SET @i += 1;
    END
    RETURN 0;
END

-- 測試
SELECT dbo.HasKorean(N'abc中文123');  -- 0
SELECT dbo.HasKorean(N'abc한글123');  -- 1

C# 版本

public static bool ContainsKorean(string text)
{
    if (string.IsNullOrEmpty(text)) return false;
    foreach (char c in text)
    {
        int code = c;
        if ((code >= 0x3130 && code <= 0x318F) || (code >= 0xAC00 && code <= 0xD7A3))
            return true;
    }
    return false;
}

避坑指南

  • 資料庫欄位必須用 NVARCHAR 儲存多語系文字
  • 連線字串加入 Charset=utf8mb4 (MySQL) 或確認 Collation 支援 Unicode
  • 前端 `` 必須放在 `` 最前面
  • 儲存檔案時確保原始碼檔案編碼為 UTF-8 (BOM 或無 BOM 均可)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved