質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Windows 11

Windows 11は、Windows 10の後継バージョン。それまでのMetroデザインを廃止し、Fluentデザインを導入しています。スタートメニューの構成やウィンドウのデザインの変更の他、Androidアプリをネイティブに実行できます。

意見交換

クローズ

4回答

4087閲覧

Windows 11(10)のシステムロケールがUTF-8になった時の注意点,・利点, 皆さんのお考えは?

ujimushi_sradjp

総合スコア2091

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Windows 11

Windows 11は、Windows 10の後継バージョン。それまでのMetroデザインを廃止し、Fluentデザインを導入しています。スタートメニューの構成やウィンドウのデザインの変更の他、Androidアプリをネイティブに実行できます。

0グッド

0クリップ

投稿2023/03/04 15:08

0

0

背景、状況

手持ちのWindows 10でコマンドプロンプトのdirコマンド出力からフォルダ一覧をJulia言語に文字列として引っ張ってくる時に,文字化けをして, 「そういやcp932だったよなぁ」と思ってutf-8への変換処理を間に入れる処理を入れたのですが,
ふと

「最近のWindows 11はどうなっているのだろう」

と思ってネットで色々調べてみました。すると,新規購入やWindowsのバージョンアップ等でシステムロケールでUTF-8が有効になるPCがあるとのことでした。
(次図の左下「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用する」のチェックが入っているPCがそうです)

Win11のUTF-8設定

作っているものが手持ちの環境以外でも利用するかもと思っていたので,現在どの程度のPCで設定されているのか気になりました。
また,自分として思いつくだけでも

  • バッチファイルの文字コードが変わって処理がうまくいかない
  • Microsoftが提供するunicodeを用いた文字表示ライブラリ以外を使っているレガシーなソフトが文字化けする

等の影響があると思う反面,python等でutf-8が標準の言語との相性は良くなるのかとも思います。

そこで,

Windows11(10)のシステムロケールがUTF-8になることについて皆さんにご意見を伺いたい

  • 皆さんが考えるWindowsがUTF-8ロケールになった時の影響(良い点・悪い点)
  • UTF-8ロケールを使っていてその感想
  • え。それって食べられるのですか?
  • いや~。まだまだそんなPC見かけないよ
  • 実はこんな問題があって元(cp932)に戻した

等,何でもいいので色々ざっくばらんにご意見いただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答4

#1

Zuishin

総合スコア28660

投稿2023/03/04 23:16

編集2023/03/05 20:46

え。それって食べられるのですか?

追記
質問に関係ないという修正依頼をつけた人は質問をよく読みましょう。
適切な回答の一例として質問者自身が挙げています。

「なんでもいい」「ざっくばらん」の意味がわからないなら、ググるか国語辞典をひけばわかります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

Zuishin

総合スコア28660

投稿2023/03/05 00:08

そもそもこんなもの、「未対応のレガシーなアプリを対応させるか切り捨てるか設定を戻しましょう」で終わる話で、わざわざ人に聞かなければいけないことではありません。

不具合の症状はアプリ次第で、そんな事例を集める意味もありません。
不具合がおこればその個々のアプリを特定し、個々に対応しなさい。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

dameo

総合スコア943

投稿2023/03/05 05:18

じゃあウンチクでも・・・

言語、地域、エンコーディング=ロケールは古代からとても厄介で面倒な問題があると思います。
デフォルトが何であるかとか標準が何であるか関係なく、「何を正しいと信じればいいのか?」があんまり明確でない時代が長く続いていたからです(もしかしたら今も…)。

端末入力(バイナリ)から得られた文字列が一体どんなエンコーディングなのか?
端末出力(バイナリ)にどんなエンコーディングで出力すればいいのか?
の正しい定義がないということです。

今回お題はWindowsということなので、Windowsで考えると、
端末のエンコーディング=コードページが分かればいいのでは?と
GetConsoleCP()とか GetConsoleOutputCP()とかに飛びつくと、、、

c++

1#include <windows.h> 2#include <iostream> 3int main() { 4 std::cout << ::GetConsoleCP() << std::endl; 5 return 0; 6}

これを例えばコマンドプロンプトで実行して、

cmd

1C:\>chcp 2現在のコード ページ: 932 3 4C:\>.\hoge.exe 5932 6 7C:\>chcp 65001 8Active code page: 65001 9 10C:\>.\hoge.exe 1165001 12 13C:\>

これが正しいと思っていると実はそうではなく、「コンソールじゃないアプリでは?」と言われるかもしれません。
例えばGetACP()を使えとか言われたなら、、、

c++

1#include <windows.h> 2#include <iostream> 3int main() { 4 std::cout << ::GetACP() << std::endl; 5 return 0; 6}

cmd

1C:\>chcp 2現在のコード ページ: 932 3 4C:\>.\hoge.exe 5932 6 7C:\>chcp 65001 8Active code page: 65001 9 10C:\>.\hoge.exe 11932 12 13C:\>

この関数が使われてるのかは知りませんが、例えばpythonでこんなコードを書くと、、、

python

1import subprocess 2print(subprocess.run('echo 日本語', shell=True, capture_output=True, text=True).stdout)

cmd

1C:\>chcp 2現在のコード ページ: 932 3 4C:\>python --version 5Python 3.11.2 6 7C:\>type hoge.py 8import subprocess 9print(subprocess.run('echo 譌・譛ャ隱・, shell=True, capture_output=True, text=True).stdout) 10 11C:\>python hoge.py 12日本語 13 14 15C:\>chcp 65001 16Active code page: 65001 17 18C:\>type hoge.py 19import subprocess 20print(subprocess.run('echo 日本語', shell=True, capture_output=True, text=True).stdout) 21 22C:\>>python hoge.py 23Exception in thread Thread-1 (_readerthread): 24Traceback (most recent call last): 25 File "threading.py", line 1038, in _bootstrap_inner 26 File "threading.py", line 975, in run 27 File "subprocess.py", line 1552, in _readerthread 28UnicodeDecodeError: 'cp932' codec can't decode byte 0x9e in position 8: illegal multibyte sequence 29None 30 31C:\>python 32Python 3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)] on win32 33>>> import locale 34>>> locale.getlocale() 35('Japanese_Japan', '932') 36>>>

ということなわけです。Unix系との対比で考えると、setlocale()だよなぁとも思うわけで、WindowsのCRTで

c

1setlocale(LC_ALL, "");

挙動を見ると、

ロケールを既定に設定します。これはオペレーティング システムから取得したユーザー既定の ANSI コード ページです。 ロケール名は、GetUserDefaultLocaleName によって返される値に設定されます。 コード ページは、GetACP によって返される値に設定されます。

そうなるのもアリかなぁと思います。コンソールを追求すると他と合わなくなり、「動作が統一されない!」といろいろお怒りの方が現れるわけで、とても厄介で面倒だなぁと思います。

デフォルト変えるのもいいのですが、何か統一の指針となる正しい動作も一緒に欲しい気がしますね。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

DF64bit

総合スコア18

投稿2023/03/08 06:26

(web開発しかやってないアマグラマーがすみません)僕は時々覚えたいことが書かれたメッセージボックスを出すプログラムをVBScriptで書くことがあるのですが、VBScriptのコンパイラはプログラムの文字コードがShift_JISだという前提の上でプログラムを実行するので、メモ帳でVBScriptを書くときは少々面倒だと感じています。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問