答客問:中文欄位對輸出資料長度的影響?
在口罩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.醫事機構地址});
- 中文欄位: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 的原因了。
小結
中文在網路傳輸過程明顯比英文會佔用更多的位元數。我不清楚政府公開資料採用這樣設計的用意。平常除了資料本身之外,欄位還是盡量不用採用中文。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。