原始問題:VARCHAR(50 Byte) 的資料欄位,但要傳入的資料很多都超過這個長度,而且有中、英混雜。 簡單解法: string inputText; inputBytes = System.Text.Encoding.GetEncoding("Big5").GetBytes(inputText); string postprocessText = inputBytes.Length > 50 ? System.Text.Encoding.GetEncoding("Big5").GetString(inputBytes, 0 50) : inputText; 再用處理過的 postprocessText 傳進資料庫即可。 衍生問題: 1.中文字可能會被截斷,本例中的使用者不要求,故截斷無妨,若使用者會在意,就不能直接用 GetString() 這個方法簡單完成;有個笨方法是用 String.SubString() 一個一個字元往後延伸,不斷計算每次延伸以後的 ByteLength,若是超過就回傳上一個 SubString 當做結果,不知道有沒有更好的解法。 2.有人說用 Encoding.Default 在中文系統會有問題,建議使用 GetEncoding("Big5"),這部份我不是很確定問題發生的原因為何。
留言