コンピュータを使っていると、文字コードを調べなければならないことがある。昔なら文字コードは8bitしかなかったので、ASCIIコード表からすぐだったが、現在は多数の言語の文字を収録したUnicode(ユニコード)が一般的なので、一覧表から調べることは難しい。
文字1つぐらいならインターネット検索でもなんとかなるが、2つ、3つとなると面倒だ。かといって、文字コードを調べるソフトウェアを探してインストールするのもまた面倒。こういうときには、Windowsの標準機能を使うといい。
Windowsには、「文字コード表」というプログラムもあるが、一覧から文字を探して、そのコードを表示することはできるが、文字そのものから直接コードを教えてくれるわけではない。こういうときには、Windows PowerShellが利用できる。ここでは、ブラウザやプログラムが出力した文字をクリップボードなどでコピーして、その文字の文字コードを調べる方法を解説する。
実際に調べる前にちょっとした準備を
Windows PowerShellには、さまざまな文字セットと文字エンコーディングを扱うことができるが、それを動かすコンソールウィンドウが旧式であるため、表示に制限がある。これを解消するには、Windows PowerShellをWindows Terminalで動かす。Windows Terminalは、Microsoftストアから簡単にインストールできるほか、以前解説したwingetを使うことも可能だ(「一般向けの配布も開始されているWindows用のパッケージ管理ツール「winget」がv1.1に」)。
●Windows Terminal
https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701?SilentAuth=1&wa=wsignin1.0&activetab=pivot:overviewtab
初めてWindows Terminalをインストールして、起動するとWindows PowerShellが起動してターミナルウィンドウが開くはずである。基本的な使い方はこれで問題ないが、標準状態では、一部の文字が文字化けすることがある(文字化けするのはWindows PowerShellだけでPowerShell 7やプレビューは文字化けしない)。
たとえば、絵文字を入れると正しく表示されず、入力上は「??」となる。ただし、PowerShell側には正しく伝わっており、これは単に表示だけの問題である。解消するには以下のコマンドを入れる(以下のコマンドをコピーしてCtrl+VでWindows Terminalに貼り付ければよい)。
[System.Console]::OutputEncoding=[System.Text.Encoding]::UTF8
これで文字入力時に文字化けしなくなる。また、以後の実行例では、この設定をしているのが前提となっている。
文字と文字コード
文字と文字コードは、実は同じデータの表示方法が違うだけだ。メモリの中では、すべて1と0からなるデジタルデータになっている。このデータを文字コードだとして表示させれば文字になるし、整数値だとして表示すれば数字になる(実際には整数値を表す文字列を計算している)。
クリップボードに文字がはいっているとき、それを文字として扱うには、ダブルクオートを両側においてEnterキーを押す。いま、クリップボードには「漢」という文字が入っていると仮定する。PowerShellでは、ダブルクオートで囲まれた部分を文字列という。複数の文字を入れることができるが、ここでは「漢」1文字だけである。
では、その文字コードを表示させてみよう。カーソルキーの上矢印を押せば、さっき入力したコマンド行があらわれる(ヒストリ機能)。ここでHomeキーを押してカーソルを先頭にもっていき、“[int][char]”と入力する。その後Enterキーを押せば、今度は文字ではなく数字が表示される。これが「漢」の文字コードである。
“[int][char]”は、意味としては、文字列を文字(char)として扱い、そのあと整数(int)として扱えという指示である(これをキャストという)。PowerShellの中では、すべてのデータには「型」がある。ダブルクオートで囲まれたものは、すべて文字列型だ。キャストとは「鋳造」の意味で、「別の型にはめる」ことを意味する。
表示された数字が文字コードだが、文字コードといってもいろいろなものがある。文字コードは、「文字セット」と「エンコード」で決まる。文字セットは文字の集合で文字1つ1つにコードを割り当てる。エンコードは、このコードをどのようなビットパターンで表現するのかを決める。このため、同じ文字であっても、エンコードが違うとビットパターンが異なるものになる。
現在のWindowsでは、文字セットに「Unicode」を使い、エンコードには、UTF-16という方式を使う。表示された数字は、Unicodeの文字に割り当てられた番号(Unicodeではコードポイントという)をUTF-16という形式にした場合の数字だ。
逆に文字コードを文字にしてみよう。先ほど表示された文字コードである「28450」を使って「[char]28450」と入力してEnterキーを押してみる。ちゃんと「漢」と表示された。
この連載の記事
-
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 -
第447回
PC
この秋登場のWindows 11の新バージョン、Ver.24H2の状況を見る -
第446回
PC
Windows 11のフォトアプリがUWPからWin32アプリになったことで今更わかるUWPの問題点 - この連載の一覧へ