文字列のバイト長を求める

注意:
この文書は以前「.NETでいきまっしょい!」で公開していたものですが、公開以降メンテナンスされていません。 今や古い情報となった内容が記載されている場合があるのでご注意ください。

 String.Lengthでは文字列の文字数を取得することはできるが、内部表記のバイト長を知ることはできない。 また、文字列のバイト長は文字列の内部表記、つまりコードページによっても異なる。 .NET Frameworkでは、文字列を一度バイト配列に変換し、そのバイト配列を目的のコードページに変換してからバイト長を取得する。 ここではシフトJISで表した場合の文字列のバイト長を取得するサンプルを挙げる。
VB.NET
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
Imports System
Imports System.Text

Module Module1

    Sub Main()

        Dim text As String
        Dim source() As Byte
        Dim encoded() As Byte
        Dim destEncoding As Encoding

        ' 変換される文字列
        text = "ABCあいう亜井宇"

        ' 文字列をバイト配列に変換
        source = Encoding.Unicode.GetBytes(text)

        ' エンコーディングを取得 (シフトJISコードページ)
        destEncoding = Encoding.GetEncoding(932)

        ' コードページをUnicodeからシフトJISに変換
        encoded = Encoding.Convert(Encoding.Unicode, destEncoding, source)

        Console.WriteLine("文字列: {0}", text)
        Console.WriteLine("文字列の長さ: {0}", text.Length)
        Console.WriteLine("文字列のバイト長: {0}", encoded.Length)

    End Sub

End Module
C#
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
using System;
using System.Text;

namespace CalcStringByteLength
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            string text;
            byte[] source;
            byte[] encoded;
            Encoding destEncoding;

            // 変換される文字列
            text = "ABCあいう亜井宇";

            // 文字列をバイト配列に変換
            source = Encoding.Unicode.GetBytes( text );

            // エンコーディングを取得 (シフトJISコードページ)
            destEncoding = Encoding.GetEncoding( 932 );

            // コードページをUnicodeからシフトJISに変換
            encoded = Encoding.Convert( Encoding.Unicode, destEncoding, source );

            Console.WriteLine( "文字列: {0}", text );
            Console.WriteLine( "文字列の長さ: {0}", text.Length );
            Console.WriteLine( "文字列のバイト長: {0}", encoded.Length );
        }
    }
}
出力結果
文字列: ABCあいう亜井宇
文字列の長さ: 9
文字列のバイト長: 15
Press any key to continue

 このほかのコードページでのバイト長を取得するには、GetEncoding()メソッドで指定している部分を目的のコードページに変えるだけでできる。 詳しくは「文字列のコードページを変換する」を参照すること。