日本語のWindowsは礼儀作法にうるさい?――英語環境で動作するコードが日本語環境でNGなワケ:その知識、ホントに正しい? Windowsにまつわる都市伝説(86)(2/2 ページ)
英語環境では問題ないのに、日本語環境だと正常に動作しない。一見、単純なスクリプトでもそんなことがあります。その原因として、システムロケールの違いが大きく影響していることがあります。
犯人は「“”」とハイフンっぽいもの
前出の画面1や画面2では、ぱっと見だと分かりにくいかもしれませんが、意図的に幾つかの種類のダブルクォーテーションとハイフンを織り交ぜています。日本語環境とWSH環境でエラーを発生させているのは、ダブルクォーテーションっぽく見える文字コード147(0x93)と148(0x94)の文字と、ハイフンっぽく見える文字コード150(0x96)と151(0x98)の文字でした(画面5)。
これらの文字は、英語環境のWindows PowerShellでは使えてしまいますが、日本語環境では完全にUnicodeのコードセットの範囲にあります(画面6)。日本語環境でプログラムコードとして使えるのは、いわゆる「半角英数字」と呼ばれる、ASCII文字コードセットの128字の範囲にある、文字コード34(0x22)の「"」と文字コード45(0x2D)の「-」です。
このような文字が紛れ込む理由には、ドキュメントやコード作成者の配慮のなさ、ドキュメントやWeb編集ソフトによる意図しない変換などが考えられます。筆者は文字コードに詳しいわけではないので、他にも理由があるのかもしれません。
過去には、Windows Server 2016プレビュービルドにこんな問題が……
英語環境のWindows PowerShellでは、日本語環境ではどうやって入力するのかも分からないような、ダブルクォーテーションやハイフンのように見える文字が許容されてしまうようです。そして、英語圏のプログラマーが書いたコードには、このような文字が含まれてしまうことがあります。また、これらのコードとして問題のある文字は、PDF形式のドキュメントをコピー&ペーストすると遭遇することがあります。
こんなことはレアケースだと思いますか。実は、Windows Server 2016の開発中に、Windows PowerShellのモジュールの1つに、不適切な文字(ダブルクォーテーションらしきもの)が含まれていて、特定のコマンドレットが日本語環境では全く動作しないという不具合がありました(画面7)。念のため付け加えておくと、Windows Server 2016の正式リリースで、この問題は解消されました。
- Windows Server 2016 TP3 > システムロケールと FailoverClusters モジュール問題(の真相)(筆者の個人ブログ:山市良のえぬなんとかわーるど)
筆者紹介
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows Server 2016テクノロジ入門−完全版』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Windowsで起動時に自動実行される不要なプログラムを「見つける」方法
アプリケーションのインストールなどを繰り返していると、いつのまにかWindowsの起動時に自動実行されるプログラムが増殖する。これらを確認するには、Windows 2000なら[コンピュータの管理]を、Windows XPなら[システム情報]を使う。またWindows XPでは[システム構成ユーティリティ]で削除指定ができる。 - Windowsのsvchost.exeプロセスとは? ―sc.exeでサービスをコマンドラインから制御する―
リッスンしているネットワーク・ポートを調べていると、svchost.exeというプロセスが所有者となっていることがよくある。svchost.exeは、ネットワーク関連の基本的なサービスを起動するための親となるプロセスであり、いくつかのグループに分けてサービスを起動している。scコマンドを使うと、サービスをコマンド・プロンプトから制御することができる。 - Windows 10のWindows Updateサービスを停止しようと考えている方へ
Windows 10のWindows Updateは、以前のWindowsから大きく変わりました。Windows 10になってからも変更は続いています。半ば強制的なWindows Updateに対抗する最終手段は「Windows Updateサービス」の無効化ですが、どうしてもというなら、影響を知った上で一時的に無効化するのがよいでしょう。 - Windows 10初期リリース(1507)のサービス終了のお知らせ
マイクロソフトは2017年4月12日(日本時間、以下同)、当初の予定通り、Windows Vista(Service Pack 2)に対する全ての製品サポートを終了しました。次にサポートが終了するのはWindows 7ですが、まだ3年もあると思っていませんか。それよりも前に、セキュリティ更新提供が終了するWindows 10があります。