ASP.NET 頁面亂碼通常源於請求/回應編碼不一致、檔案下載中文檔名編碼、特殊語系字元識別。本文提供三大場景的標準解決方案。
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
建議統一使用 UTF-8,支援全語系,避免 GB2312/Big5 相容性問題。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
string fileName = "中文報表.pdf";
string encodedName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
Response.AddHeader("Content-Disposition", $"attachment; filename={encodedName}");
HttpUtility.UrlEncode 指定 UTF-8 編碼filename*=UTF-8''{encodedName} 格式(RFC 5987)filename="{encodedName}"韓文 Unicode 區間:
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
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