Encoding.GetByteCountメソッドを使うことで文字列を任意の文字コードにエンコードしたときのバイト数を取得出来る。
using System;
using System.Text;
class Sample {
static void Main()
{
string s = "ABCアイウあいう漢字";
Encoding e = Encoding.GetEncoding("shift_jis");
Console.WriteLine("Length = {0}", s.Length);
Console.WriteLine("ByteCount = {0}", e.GetByteCount(s));
}
}
Imports System
Imports System.Text
Class Sample
Shared Sub Main()
Dim s As String = "ABCアイウあいう漢字"
Dim e As Encoding = Encoding.GetEncoding("shift_jis")
Console.WriteLine("Length = {0}", s.Length)
Console.WriteLine("ByteCount = {0}", e.GetByteCount(s))
End Sub
End Class
実行結果
Length = 11 ByteCount = 16
文字ごとに1バイト文字か2バイト文字かを調べるためのメソッドは無いため、Encoding.GetByteCountメソッドを使って調べるには、String.Substringメソッドで一文字ずつ切り出して調べるか、いったんchar配列に変換して調べる必要がある。
using System;
using System.Text;
class Sample {
static void Main()
{
string s = "ABCアイウあいう漢字";
char[] chars = s.ToCharArray();
Encoding e = Encoding.GetEncoding("shift_jis");
for (int index = 0; index < chars.Length; index++) {
Console.WriteLine("'{0}' - {1} byte(s)", chars[index], e.GetByteCount(chars, index, 1));
}
}
}
Imports System
Imports System.Text
Class Sample
Shared Sub Main()
Dim s As String = "ABCアイウあいう漢字"
Dim chars() As Char = s.ToCharArray()
Dim e As Encoding = Encoding.GetEncoding("shift_jis")
For index As Integer = 0 To chars.Length - 1
Console.WriteLine("'{0}' - {1} byte(s)", chars(index), e.GetByteCount(chars, index, 1))
Next
End Sub
End Class
実行結果
'A' - 1 byte(s) 'B' - 1 byte(s) 'C' - 1 byte(s) 'ア' - 1 byte(s) 'イ' - 1 byte(s) 'ウ' - 1 byte(s) 'あ' - 2 byte(s) 'い' - 2 byte(s) 'う' - 2 byte(s) '漢' - 2 byte(s) '字' - 2 byte(s)