Unicodeテキストのバイト単位的読み込み

今まではShift_JISのファイルを対象にバイト単位的に読み込んできた。今度はUnicodeのファイルをそれと同じくバイト単位的方法で読み込んでみよう。

エクセルの内部ではUnicodeが使われているから、バイト単位的に読み込んでも、基本的には何の細工もしなくてもそのままでテキストが表示されるはずである。この点ではShift_JISの読み込みよりは簡単になる。


1
対象とするファイルである(uni_std.txt)。
Unicode UTF-16LEでBOM付きのファイルである。


2
実行するとこのようになる。上のバイトデータがそのまま表示されている。
しかし、ファイルの先頭部分にある2バイトのBOMの部分が「文字」であると解釈されて、それが文字化けしている。先頭に「?」が見えるのがそれである。
BOMは文字コード処理には必要不可欠で重要なものだが、表示する必要はない「裏方」なのである。


この対策はもう何度もやり飽きたものである。この点についてはConvUTF16.basをはじめとするConv系の*.basを参照。今これを修正すべき点はない。今でも有効に使えるので、これ以下は省略する。


ファイル単位とバイト単位

それよりも、この読み込み方法、すなわちファイル単位的方法の根本的な欠陥を是正することのほうが先決である。これは今回の「再検討」シリーズの動機でもある。

この実験サンプル程度の短いテキスト場合はほとんど問題が生じない。しかし、これがもっと長いテキストの場合、たとえば20~30万バイト程度のテキストではその欠陥(実行速度が遅くなるなど)が露呈してくるからである。

テキストファイルを処理する場合は、ある程度ブロック単位または行単位で読み込むほうが効率がよいからである。これが行単位的処理の利点である。ファイル全部を読み込む場合のメモリ負担(圧迫)の程度も格段に異なる。

重要
バイト単位的処理で純粋にバイト操作をするだけなら対象ファイルの文字コードはほとんど問題にならない。
しかし、データの表示面では対象ファイルが、たとえばShift_JISかUnicodeかによって、その方法は異なる。


再検討

この項は、「参考と詳細検討/Unicodeのバイト単位的読み込み(vba_0038)」に移動。エクセルバカが見ても無意味な理論的な面の検討である。

- 2014/04/22 -




文字コード関連のモジュール(ipc_0040)


ipc_0053からipc_0062までのソース(vba_6013)
Unicodeのバイト単位的読み込み(vba_0038)



エクセルバカの言うことは無意味である(エクセルバカの第一法則)。相手にならない。
LOG
163.215.6.1 [21/Jul/2015:12:58:41] bit単位の読み込み
パソコンの超基本的知識として、こんなことはC/C++でもできないことは常識である。ましてや無知蒙昧のエクセルバカがこんなことをやりたがるとは、もう末世である(笑)。しかし、エクセルバカは元々bitbyteも意味は知らないのだからどうしようもない。

LOG
210.128.183.43 [25/Apr/2016:10:18:54] excel vba Line Input utf-8 utf16
202.17.133.100 [24/Sep/2015:12:10:18] VBA UTF BOM付き FreeFile
どこかで拾ってきた単語をベタベタ並べただけ。無知でもバカでも「文字コードごっは」はしたいという程度のヤカラである。つくづく、エクセルはパソコン界のバカの宝庫である。壮大なバカの世界である。ほぼ全部のパターンのバカが出演してくる。

LOG
66.102.6.149 [25/Mar/2017:12:01:48] VBA バイナリ 読み込み メモリ対策
66.102.6.203 [24/Mar/2017:21:42:55] VBA バイナリ 読み込み メモリ対策
121.83.72.30 [08/Mar/2017:17:39:10] Unicode (UTF-8)  読み込みファイル
無知とは平和である(笑)。




Unicode,UTF-8,UTF-16,Big,Little,Endian,LE,BE,Shift_JIS,SJIS,CR,LF,CRLF,byte,bit,word,CSV,BOM,Encode,Decode,ANSI, Binary,Open,Byte,Get,Put,InputB,AscB,Hex,Mod,LOF,Loc,FreeFile,ReDim,Encoding, バイナリ,テキスト,文字列,文字コード,16進コード,16進文字列,変換,ビッグ,リトル,エンディアン,ユニコード,改行,サンプル, バイト,ビット,ヘキサ,2進数,16進数,読み込み,書き込み,エンコード,デコード,解析,変換,判定,判別,バイナリエディタ, 全角,半角,カタカナ,ひらがな,漢字,