|
メモリ上での文字列の取り扱いには注意が必要です
例えば、
dim strBuffer as string
strBuffer = "ABCDEあいうえお"
とした場合、ここで使用している変数strBufferについてみてみると、
len(strBuffer) -> 10 (*)文字数の取得
lenb(strBudder) -> 20 (*)バイト数の取得
となってしまいます。これはメモリ上ではUnicodeという形式でデータが取り扱われている為で、全ての文字が2バイトコードとして下記のように扱われているためです。そのため、下図のように1バイト文字(ここでは"ABCDE"の部分)と2バイト文字(ここでは"あいうえお")とが区別されずに、どちらも1文字が2バイトとして扱われてしまっているのです。
| 01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
|
A
|
B
|
C
|
D
|
E
|
あ
|
い
|
う
|
え
|
お
|
このような事態を避けるには、byte型を用いる事でも対応できますが、ここでは文字列として使用する方法について考えてみましょう。
この両者を区別して、下図のような形で文字列を扱いたい場合には少し工夫が必要となります。
| 01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
15 |
|
A
|
B
|
C
|
D
|
E
|
あ
|
い
|
う
|
え
|
お
|
strConv関数を使用すると以下のようにバイト数として15を取得する事ができるようになります
len(strConv(strBuffer,vbFromUnicode)) -> 10
lenb(strConv(strBuffer,vbFromUnicode)) -> 15
|