コンピュータを使っていると、文字コードを調べなければならないことがある。昔なら文字コードは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キーを押してみる。ちゃんと「漢」と表示された。
この連載の記事
-
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ - この連載の一覧へ