掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VBでバイナリデータをテキストデータに変換するには? (ID:92191)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
えーと。どこから説明したものやら。 まず、Shift_JIS(SJIS)ですが、これはBlueさんが書かれたように、 データの先頭から調べなければなりません。 Shift_JISという形式は、「1バイトで構成される文字」と「2バイトで 構成される文字」が混在しています。しかも、文字によっては 『=』 → 81 81 『≠』 → 81 82 『a』 → 82 81 『b』 → 82 82 のようになっているため、データの内容だけ見ても、文字として どこで切り出すべきかは判定できません。 そのため、バイナリの先頭から順に取り出して、それぞれが 「1バイト文字」なのか「2バイト文字の1バイト目」なのか 「2バイト文字の2バイト目」なのかを判定していくしかありません。 一方、Unicodeですが……実は、これには幾つかの種類がありますが、 有名なのは、UTF-8 と UTF-16 なので、この2つについて見てみましょうか。 (細かい事を言えば、UTF-16にも、さらに数種類の形式があったりしますが) UTF-16 の場合、全ての文字が「2バイト単位」で構成されていますので、 単純に2バイト単位で区切っていく事で、文字単位に取り出す事が可能です。 しかし、(バイト位置ではなく)バイナリ内容を見るだけでは、 文字の区切り位置を判定することはできません。たとえば、 『†』 → 20 20 のように、1バイト目と2バイト目が同じバイナリになる事があるからです。 UTF-8 の場合は、文字によってバイト長が異なる形式です。 そのため、バイト位置を見ただけでは、文字として切り出す事ができません。 その代わりに、(バイト位置ではなく)バイナリ内容を見るだけで、 文字の区切り位置を判定する事ができるようになっています。 2進数で表現した時に、「0xxxxxxx」のように、ビットの先頭が0に なっていれば、それは『1バイトのみで構成される文字』です。 2進数で「110xxxxx」の形式なら、『2バイト文字の1バイト目』です。 2進数で「1110xxxx」の形式なら、『3バイト文字の1バイト目』です。 2進数で「11110xxx」の形式なら、『4バイト文字の1バイト目』です。 2進数で「10xxxxxx」の形式になっていれば、『複数バイトで 構成される文字の、1バイト目以外(つまり2バイト目以降)』となります。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.