VB.NETで文字列をバイト配列に変換!Encodingの基本を完全解説
生徒
「VB.NETで、文字を『バイト配列』というものに変えないといけない場面があるのですが、どうすればいいですか?」
先生
「それはデータの通信やファイルの保存などでよく使う技術ですね。Encoding(エンコーディング)という機能を使います。」
生徒
「エンコーディング?バイト配列?聞き慣れない言葉ばかりで難しそうです…。」
先生
「大丈夫ですよ。パソコンが文字を理解する仕組みさえ分かれば、意外とシンプルです。基本から一緒に学んでいきましょう!」
1. 文字列とバイト配列の関係とは?
プログラミング未経験の方にとって、まず知っておくべき大切なことがあります。それは、パソコンは文字をそのまま理解できないという点です。パソコンの脳内では、すべての情報を「0」と「1」の数字の組み合わせで処理しています。この「0」と「1」で構成されるデータの最小単位に近い形がバイト(Byte)であり、その数字がずらりと並んだ状態をバイト配列と呼びます。
私たちが普段見ている「あいうえお」という文字列を、パソコンが扱える数字の列(バイト配列)に翻訳する作業が必要です。この翻訳ルールのことをEncoding(エンコーディング)、または文字コードと呼びます。VB.NETでは、この翻訳作業を専用の命令を使って簡単に行うことができるようになっています。データの保存やネットワーク通信、暗号化など、一歩進んだプログラムを作る際には欠かせない知識です。
2. 文字コード(UTF-8)の役割を理解しよう
翻訳ルール(文字コード)にはいくつかの種類があります。現在、世界中で最も一般的に使われているのがUTF-8(ユーティーエフ・エイト)です。他にも、昔の日本のパソコンでよく使われていたShift-JIS(シフトジス)などがあります。
例えるなら、日本語を英語に翻訳するのか、フランス語に翻訳するのかという違いに似ています。翻訳ルールを間違えると、文字がぐちゃぐちゃになる「文字化け」という現象が起きてしまいます。VB.NETで文字列をバイト配列に変換するときは、どのルールで翻訳するかをしっかり指定するのがポイントです。特に理由がなければ、最新の標準であるUTF-8を使うのが最も安全で確実な方法と言えます。
3. GetBytesメソッドで文字列を変換する基本
それでは、具体的にVB.NETのコードを書いていきましょう。文字列をバイト配列に変換する際には、GetBytes(ゲット・バイツ)というメソッド(命令)を使います。この命令は、System.Text名前空間にあるEncodingクラスの中に用意されています。
まずは、最も標準的なUTF-8を使って、簡単な英単語をバイト配列に変換する例を見てみましょう。初心者の方でも、この型通りに書けば動作しますので安心してください。
' 変換したい元の文字列を用意します
Dim text As String = "Hello"
' UTF-8というルールを使ってバイト配列に変換します
Dim byteArray As Byte() = System.Text.Encoding.UTF8.GetBytes(text)
' 変換された数字の数を確認してみましょう
Console.WriteLine("データの長さ: " & byteArray.Length)
実行結果は以下のようになります。
データの長さ: 5
このコードでは、「Hello」という5文字が、5つの数字の塊に変換されました。アルファベットの場合、UTF-8では1文字がちょうど1バイトになるため、長さが5となります。このように、目に見える文字がデジタルの数字に変わった瞬間です。
4. 日本語(ひらがな)をバイト配列にする際の注意点
アルファベットは単純でしたが、日本語(ひらがなや漢字)を変換する場合は少し結果が変わります。日本語は情報量が多いため、1文字を表現するのに複数の数字(バイト)が必要になるからです。例えば、UTF-8というルールでは、ひらがな1文字は通常3バイトとして計算されます。
初心者の方が「文字数とバイト数が合わない!」と驚くことがありますが、これは正常な動作です。プログラムの中でデータサイズを計算するときに重要になる知識ですので、以下のコードで実際に確認してみましょう。
Dim japaneseText As String = "あいう"
' 日本語をUTF-8でバイト配列に変換
Dim sjisBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(japaneseText)
' 3文字ですが、バイト数はいくつになるでしょうか?
Console.WriteLine("文字数: " & japaneseText.Length)
Console.WriteLine("バイト数: " & sjisBytes.Length)
実行結果は以下のようになります。
文字数: 3
バイト数: 9
結果を見ると、3文字の「あいう」が9バイトになっていることが分かります。これは、1文字につき3つの数字を使ってパソコンに記憶させているからです。このように、文字列をバイト配列に変換することで、そのデータがパソコンのメモリやハードディスクの中でどれくらいの場所(容量)を占めるのかを正確に知ることができるようになります。
5. 変換されたバイト配列の中身を確認する
「バイト配列になった」と言われても、中身がどうなっているか見えないと実感が湧きませんよね。バイト配列の中身は、0から255までの数字の集まりです。これを一つずつ画面に表示して、パソコンが文字をどのように数字で覚えているのかを覗いてみましょう。
この確認作業を行うことで、デバッグ(プログラムの間違い探し)の際にも役立つスキルが身に付きます。数字の羅列を見るのは最初は抵抗があるかもしれませんが、これがパソコンの真の姿です。
Dim secretMessage As String = "VB"
Dim bytes As Byte() = System.Text.Encoding.UTF8.GetBytes(secretMessage)
Console.WriteLine("中身の数字を確認します:")
For Each b As Byte In bytes
' 数字を一つずつ表示します
Console.WriteLine(b)
Next
実行結果は以下のようになります。
中身の数字を確認します:
86
66
「V」は86、「B」は66という数字に割り振られていることが分かります。世界中のパソコンで「86はVのことだね」という共通のルール(文字コード)があるおかげで、私たちは異なるパソコン間でも正しく文字をやり取りできるのです。この数字の列こそが、バイト配列の正体です。
6. バイト配列を文字列に戻す方法(GetString)
一度バイト配列に変換したデータを、再び私たちが読める文字列に戻したいときもありますよね。例えば、インターネットから届いた数字の列を文章に戻すような場面です。このときは、GetBytesの逆で、GetString(ゲット・ストリング)という命令を使います。
大切なのは、変換したときと同じルール(Encoding)を使うことです。UTF-8で数字にしたなら、戻すときもUTF-8を使わないといけません。違うルールを使うと、先ほど説明した「文字化け」が起きてしまいます。この「行って来い」の処理ができるようになれば、データの取り扱いマスターに一歩近づきます。
Dim originalText As String = "変換テスト"
Dim dataBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(originalText)
' バイト配列から文字列へ戻します
Dim recoveredText As String = System.Text.Encoding.UTF8.GetString(dataBytes)
Console.WriteLine("元の文字: " & originalText)
Console.WriteLine("復元された文字: " & recoveredText)
実行結果は以下のようになります。
元の文字: 変換テスト
復元された文字: 変換テスト
無事に元通りになりましたね。これで、文字列とバイト配列の間を自由に行き来できるようになりました。この技術は、ファイルの読み書きやデータベースへの保存など、実務的なプログラムでは必ずと言っていいほど登場する非常に重要なステップです。
7. 文字コードの指定方法と注意点
これまでの例では System.Text.Encoding.UTF8 を使ってきましたが、業務システムによっては古い形式の「Shift-JIS」を使う必要があるかもしれません。VB.NETでは Encoding.GetEncoding("Shift-JIS") という書き方で、他の文字コードを指定することも可能です。
ただし、最近のWindowsやインターネットの標準は圧倒的にUTF-8です。パソコンに詳しくない方が新しいアプリを作るなら、まずはUTF-8一択で進めるのが良いでしょう。また、文字コードの指定を忘れると、パソコンの設定(環境)によって勝手にルールが決められてしまい、他の人のパソコンで動かしたときに文字が化ける原因になります。常に「どのルールで変換するか」を意識することが、プログラマとしての良い習慣になります。
8. 文字列操作とバイト配列の活用の幅
今回学んだ「文字列をバイト配列に変換する」という操作は、一見すると地味な作業に感じるかもしれません。しかし、この知識があるだけで、画像データの処理や、パスワードのハッシュ化(安全に保存するための加工)、ファイルの圧縮など、多くの高度な機能への扉が開かれます。
パソコンを触り始めたばかりの頃は、「なぜわざわざ数字に変えるの?」と不思議に思うかもしれませんが、それはパソコンと対話するための共通言語を作っているようなものです。VB.NETはこのあたりの処理が非常に親切に設計されており、初心者でも安全にデータを扱うことができます。今回の内容を理解できれば、文字列操作の基礎はバッチリです。自信を持って次の学習に進んでくださいね!