答客問:中文欄位對輸出資料長度的影響?

答客問:中文欄位對輸出資料長度的影響?

在口罩API系統()()都有朋友提出了中文欄位對長度的見解。我是個人沒什麼特別的想法,Just Do it 的寫程式驗證最簡單有效。

public async Task<IActionResult> ChineseAddress()
{
    var maskinfos = await _maskService.GetMaskInfo();
    var address = maskinfos.Select(m => new { 醫事機構地址 = m.醫事機構地址});
    return Ok(address);
}

public async Task<IActionResult> EnglishAddress()
{
    var maskinfos = await _maskService.GetMaskInfo();
    var address = maskinfos.Select(m => new { Address = m.醫事機構地址});
    return Ok(address);
}

我們挑裡面的 醫事機構地址Address 來轉換與比較。

中文欄位
英文欄位
  • 中文欄位:453.31 KB
  • 英文欄位:383.24 KB

很明顯中文欄位讓資料量大了 70 KB。我們不死心,縮短一下中文名稱:

var address = maskinfos.Select(m => new { 醫地址 = m.醫事機構地址});
中文欄位2
  • 中文欄位:395.98 KB
  • 英文欄位:383.24 KB

結果還是略高於英文欄位 12 KB。

字串小教室

以下使用 LINQPad 測試。

"醫地址".Length.Dump("中文字串長度");
"Address".Length.Dump("英文字串長度");

//中文字串長度
//3
//英文字串長度
//7

單就 string 型別來看長度,一個中文的長度為 1。但在傳輸序列化的過程,當發現中文字時會採用 UTF-8 來編碼:

Encoding utf8 = Encoding.UTF8;
utf8.GetByteCount("醫地址").Dump("UTF-8中文字串長度");
utf8.GetByteCount("Address").Dump("UTF-8英文字串長度");

//UTF-8中文字串長度
//9
//UTF-8英文字串長度
//7

這時一個 UTF-8 中文字長度為 3。這也就是為什麼最後還多 12 KB 的原因了。

小結

中文在網路傳輸過程明顯比英文會佔用更多的位元數。我不清楚政府公開資料採用這樣設計的用意。平常除了資料本身之外,欄位還是盡量不用採用中文。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。