交換之檔案格式是限定Big5,英文長度 1 byte, 中文則是2 byte。
但在 NET不管中英文數字都是 1
Char,使用 length property 是計算有幾個Char而不管是多少byte.
所以如果在Big5檔案格式中,某個欄位長度限制為100, 那就必須先將文字內容轉為Bytes來做處理。
Example:
static void Main(string[]
args)
{
String testStr = "JB的Blog"; String input = testStr.PadRight(100,'
');
Console.WriteLine(String.Format("原始字串Big5長度:{0}",
Encoding.GetEncoding("big5").GetBytes(input).Length));
String convertInput
= covertToBig5(input,100);
Console.WriteLine(String.Format("轉換後字串Big5長度:{0}",
Encoding.GetEncoding("big5").GetBytes(convertInput).Length));
}
private static String covertToBig5(String str, int len)
{
byte[]
strBytes = Encoding.GetEncoding("big5").GetBytes(str);
String big5Str = Encoding.GetEncoding("big5").GetString(strBytes,0,
len);
return big5Str;
}
Result:
原始字串Big5長度:101
轉換後字串Big5長度:100
可以看到如果不轉成Bytes來做處理,得到的第一個實際長度是101 bytes
(因為包含一個中文)
轉換成Bytes再處理後的長度才是正確的100 bytes.