1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[VBS]今日のトリビア いつの間にかASCW、ChrWが使えるようになっている

Posted at

バージョン情報には掲載がない

バージョン情報 2009

関数のリストにもない

VBScriptの関数
ここで記載されているのはChrとASCのみである。
もともとVBScriptのファイル(.vbs)はANSI(Shift-Jis)形式だけでUTF-8はエラーになる。
【VBScript】Windows10でmsgboxが文字化けする原因と対策
なのでメモ帳のデフォルトがUTF-8になったためトラブルになる。

内部処理はUTF-16

msgbox での文字化け @ 掲示板

まず、VBScriptの文字列は、内部で UCS-2/UTF-16として保持されています。
そのため、UTF-8なバイトデータを渡しても、利用できません。

このためサロゲートペアとなる

Working with character values beyond ChrW(65535) in VbScript
ChrWは使えるもののUTF-16なのでサロゲートペアになる。Shift-JisのVBSではサロゲートペアで表記しなければならない。

公式のサンプルにはごくまれに使われ、解説もない

https://learn.microsoft.com/ja-jp/windows/win32/hyperv_v2/getvirtualsystemthumbnailimage-msvm-virtualsystemmanagementservice
今回発見できたのはこれだけだった。
公式の解説や新機能の説明はVBSにはない。

XP時代から使えていた

WSH(VBScript) で Unicode 固有文字を表示/リダイレクトするには

ということは、ロケールによって変わらない Ascii の文字にエンコードするプログラムを介して、子プロセスを実行して、親プロセスの WSH が Unicode にデコードすれば、正しく表示できるというわけです。 ただし、Windows XP の VBScript の ChrW にバグがあって、U+8000 以上の文字コードを文字に変換できません。Windows 7 なら大丈夫です。 U+10000 以上の文字(サロゲート・ペア)は、コマンド・プロンプト、Power Shell とも Windows 7 でもサポートしていません。 ちなみにメモ帳はサポートしています。

と、このようにChrWは当たり前に使われているのだが、なぜかVBSに含まれていることは公式の解説には見当たらない。
VBのサブセットだから当然使えるということなのかもしれないが。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?