Windows 10のInsider PreviewでシステムロケールをUTF-8にするオプションが追加される 105
ストーリー by hylom
互換性問題が大変そうではある 部門より
互換性問題が大変そうではある 部門より
あるAnonymous Coward曰く、
Windows Experience Blogの告知などでは一切言及されていないようだが、Windows 10 Redstone 4のInsider Previewでは、システムロケールの変更を行うダイアログに「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」(英語では'Beta: Use Unicode UTF-8 for worldwide language support')というチェックボックスが追加されている。手もとにスナップショットが残っていた最古のRS4ビルド(17004)ですでに存在していたので、正確にいつ追加されたのかは不明。
このチェックボックスをチェックして再起動すると、Build 17035時点では以下のような動作が確認できた。
- 圧縮 (zip形式) フォルダーにファイル名がUTF-8で保存されるようになった。これに伴い、シフトJISに含まれない文字を使ったファイル名も普通に保存できるようになった。
- コマンドプロンプトのコードページが既定で65001(UTF-8)になった。このときのWindows標準コマンドのメッセージは英語になる。
- メモ帳のテキストエンコーディングがUTF-8になった。なお「ANSI」を選んでもUTF-8で保存されるので、シフトJISでの保存はできなくなる模様。
- GetACP()の戻り値も65001になる。WideCharToMultiByteなどでCP_ACPを指定したときも、UTF-8に変換される。
まあどうせ(シンボリックリンクや長いパスサポートみたいに)互換性に問題が出まくって正式版ではマニフェストか何かでオプトインが必要になるのだろうが、現状は控えめに言って最高である。
env LC_ALL=en_US.UTF-8 (スコア:1)
Windows使ってると、一時的にロカール変更する方法がよくわからなくて時々困るので、
もう英語UTF-8にしてくれるならそれでもいいかと思いますが、
SJISの既存ファイルを開けなくなるのであれば困るかなぁ……。
Re: (スコア:0)
なんだよロカールって。
ちょっとクスッとしちゃったじゃないか。
Re:env LC_ALL=en_US.UTF-8 (スコア:2)
そんなに偏狭なこというなや、と思わないでもないので一言。
20年以上前は「ロカール」派もいれば「ロケール」派もいたんですがな。
英米などの英語母語国以外の西洋語にも配慮を欠いていないという建前から
排斥してはいけない「ロカール」呼び。
現状どう収束したかはしりませんけど。
Re:env LC_ALL=en_US.UTF-8 (スコア:2)
え、いや「英語読みだとロカールなのにロケールって言っちゃう人も生温かく見守る」スタンスでみんないるのかと思ってました
アメリカ英語だとロカールというよりロケル [wiktionary.org]なのね…でもロケ"ー"ルは日本語だよな
#equalを「イクォール」って表記する人とか、何語読みしてるのか知りたい
Re:env LC_ALL=en_US.UTF-8 (スコア:2, すばらしい洞察)
「オキュパイ」とかでゲラゲラ笑う年頃ってありますよね
Re:env LC_ALL=en_US.UTF-8 (スコア:1)
語感がそうだということは否定できないですね。
https://ja.stackoverflow.com/questions/21838/locale-%E3%81%AE%E7%99%BA... [stackoverflow.com]
によればJISもロケール読みを採用しているらしい。裏とっていないけど。
Re:env LC_ALL=en_US.UTF-8 (スコア:2)
発音記号を見るか,クイック再生で音を聴いてみましょう
https://ejje.weblio.jp/content/locale [weblio.jp]
音をあえてカタカナで表記すれば「ロカール」でも間違ってはないと思います
しかしJIS規格に従うと「ロケール」という表記になります
Re: (スコア:0)
ロケルときこえる。これならローケールでも許されるはずだ。
Re: (スコア:0)
そうそう。windows なら culture だよね。
https://stackoverflow.com/questions/2379514/powershell-formatting-valu... [stackoverflow.com]
https://dictionary.cambridge.org/pronunciation/english/locale [cambridge.org]
C_65001.NLS (スコア:1)
が追加されたのビルド16184だったから、結構前から計画はしてたんだろうなあ
Re:C_65001.NLS (スコア:1)
C_65001.NLSって、Windows7あたりでは既にkernel32.dllの中に直接実装してあったのをWindows 10 ver.1709で外部に独立させただけのようです。もともと、.Net FrameworkでUTF8のエンコードを実装するために使っていたらしいです。もっとも、2005年あたりだとまだ未実装で対応してないという記事もありWindows Vista以前にはそういった実装はなかったようです。
2008年の段階で既にこんな記述があります。
About Unicode Enabling Applications and Code Pages
https://blogs.msdn.microsoft.com/embedded/2008/03/31/about-unicode-ena... [microsoft.com]
Re: (スコア:0)
C_51932.NLSがどうしてないんだなんて騒ぐ人がいたりしてね。
execution-charset (スコア:1)
実装された当時、/utf-8オプション(/execution-charset:.65001)とか絶対化けるだろ、というかAで終わるAPIに渡した文字列をUTF-8として処理出来る設定無いし、どうあがいてもこれの使い道無いだろ…と思ってました。
さっそく非互換 (スコア:0)
ircクライアントであるところのchocoaが非互換ですね
もう20年も使ってるのか
Re: (スコア:0)
15年半放置されてるのに最新のWindowsで動くってのはなんというか素晴らしいな。
Re: (スコア:0)
ircはチャンネルごとにエンコードの合意があって、chocoaはそれをシフトJISに変換してからwin32 apiに渡してるんだっけか
ということはwin32がシフトJISを食わなくなるのかな
Re:さっそく非互換 (スコア:1)
Win32 APIは、APIの中で文字コードの判別なんかをしてるわけじゃないからな。
文字列が関わる全てのAPIは Unicode(UTF-16) API と、ロケール依存API の二つが用意されてて、一般的にはコンパイル時にどちらを使うのか決める。
# 実際には ほとんどのAPIが ロケール依存API を呼ぶと UTF-16 に変換されてから Unicode API を呼ぶラッパになってきてるけど)
日本語ロケールは、Shift_JIS なのでロケール依存APIは、システム設定上のShift_JISだと決め討ちで処理する。
システム設定を UTF-8 に変えたのに、Shift_JIS 渡しちゃったら入力を正しく処理できんだろうね。
このへんの仕組みは、Win16 の時代から何もやり方変わってない。
次はファイル名のセパレータを (スコア:0)
/ にしていただきたい!!!
# 更にパスのセパレータを ; から : に!!
Re:次はファイル名のセパレータを (スコア:2, おもしろおかしい)
セパレータと言えばCSV。
CSVってカンマセパレーテドバリューズの略だとみんな思ってるでしょ?
けどね、フランス語圏とかドイツ語圏だとCSVファイルと言えばセミコロン区切りのキャラクタセパレーテドバリューズが標準なんですよ。
彼ら小数点記号にカンマを使ってるからカンマ区切りのCSVだと都合が悪いんですよね。
Re: (スコア:0)
へー
SQLクエリとかスクリプトとか死にそう
いずこも大変であるなあ
Re:次はファイル名のセパレータを (スコア:2)
Cygwinが死んでしまいます
Re: (スコア:0)
今はWSLあるんだからCygwinなんかクソの役にも立たないでしょ要らん要らん
Re: (スコア:0)
WSLはファイルI/Oの遅さをなんとかしてもらわないとつらい。
Re:次はファイル名のセパレータを (スコア:1)
>更にパスのセパレータを ; から : に!!
やめてくださいしんでしまいます
Re:次はファイル名のセパレータを (スコア:1)
コマンドラインではスイッチと重なるせいかダメだけど、システムコール上はMSDOSの時代から/でokだった。
この中途半端な仕様が何十年も保持されていることに驚く。
環境変数のパスの';'、':'と、%変数名%は、まあ仕方ないんじゃない?
Re: (スコア:0)
0x5C (U+005C) のままで良いので表示を逆斜線にしてほしい。
円記号は U+00A5 で。
Re: (スコア:0)
フォント変えるだけでいいんじゃね?
#昔自作のbmpフォントでやったなぁ…。
Re: (スコア:0)
本当にこれ。なんとかしてくれ
Re: (スコア:0)
ファイルパスのセパレータを/にして環境変数のセパレータを:にするってことかね?
まあファイル名に;を使えるのに環境変数を;で区切るのは悪手ですな。
個人的には環境変数の区切りは?か|良いように思うが。パット見:よりも目立つので。
Re: (スコア:0)
>まあファイル名に;を使えるのに環境変数を;で区切るのは悪手ですな。
UNIX 系はファイル名に : を使えるけど環境変数のセパレータも : だよ。
というかファイル名に使えない文字が NUL (0x00) と '/' (0x2F) ぐらいしか無い。
じゃあ : を含むパスを環境変数で指定する方法があるかというと…
よく分からないけど無さそう。
Re: (スコア:0)
csh系のシェルなら空白区切りなので、昔試してできた気がする。
Re: (スコア:0)
空白区切りなのは csh 変数の $path, 環境変数の $PATH は相変わらず `:' 区切り。
$path を変更すると、$PATH も変更される。逆も可。
%set path = ( a:b c )
%echo $PATH
a:b:c
%setenv PATH a:b\:c
%echo $path
a b c
Re: (スコア:0)
Re: (スコア:0)
区切り文字専用コードがASCIIにあったらこんなのに悩むことは無かったのにな。
既存文字を区切りに代用した代償。
まあ仕方ないけどもやっとする。
Re: (スコア:0)
'\0' を区切りにすれば良かったんじゃね?(超絶なんとか)
Re: (スコア:0)
改行コードは普通ファイル名に使えないのでこれでなんとか
Re: (スコア:0)
いや、UNIX系なら普通に使えるよ。
Re: (スコア:0)
C:/でもC:\にアクセスできますけど?
Re:次はファイル名のセパレータを (スコア:1)
こっちがどんだけ/を使ったところで何らかのパスを返すWindows APIは容赦なく\で返してくるぞ
Re: (スコア:0)
'/'でもOKなWindows APIもあれば、NGなWindows APIもあって、結局'\'で統一することになるのよ。
Re: (スコア:0)
これで都合がよくなるユーザーなんて世界に数%しかいないと知ってるはずなのに、この我儘っぷり
Re: (スコア:0)
https://msdn.microsoft.com/ja-jp/library/77859s1t(v=vs.90).aspx [microsoft.com]
UNIX ではパス デリミタとしてスラッシュ (/) しか使用できませんが、Win32 オペレーティング システムは円記号 (\) とスラッシュ (/) の両方を使用できます。
ubuntuにすり寄ってくるなら (スコア:0)
次はRTCをUTCにするのかな。現状Liveイメージでデュアルブートすると非常にうざいわけだが。あれはsystemdのせいか
Re: (スコア:0)
何かと思ったら最近のUbuntuはWindowsとデュアルブートだとUTCじゃないんですね。
Upstartの頃はそんなことなかったのに酷い改悪だなぁ。
Re: (スコア:0)
何でもsystemdのせいにする大人の増加
Re: (スコア:0)
既にWindowsは条件を満たせばRTCに直接アクセスしないでuefiのGetTime,SetTimeやACPIの_GRT,_SRTを使う実装になっていますよ。
Re:BOM (スコア:4, 参考になる)
そう、これ私も気になった!
Windowsは疑似BOMを付けた独自UTF-8を「UTF-8」と呼び、
本来の(BOMなどない)UTF-8 を「UTF-8N」と呼んでいるので
不具合の元なんですよね。
まがい物を作るだけならまだしも、それに本家の名を名乗らせちゃあ
混乱の元になるだけです。
この記事で言うこところのUTF8がMS独自UTF8だったら最悪、
でなければ良いニュースですが、どっちでしょうね。
# データI/F仕様書に「文字コードはUTF8」と書いてあっても
# Win向けソフトウェア&&書いた人がWindows畑の人だと疑似BOMありが
# 正解だったりするから、本来のUTF8(BOMなし)で正しく実装したら
# 他所とデータがやりとりできなくなるという・・・
Re:BOM (スコア:1)
あーそこデタラメ言わないように。
UTF-8Nの呼び方はWindows用サードパーティソフトで使われているだけ。
MS自身がUTF-8Nの呼び方をしている文献は見たことがない。
メモ帳がBOM付けているのは知っている。
WideCharToMultiByte等のAPIはBOM付けないよ。
Re:BOM (スコア:2)
で、BOM付きUTF-8食わせるとCSVのように扱われはするけど、上書き保存すると悲惨なことに。
Re:メンテされなくなった古いソフトの互換性 (スコア:1)
VzエディタをWindows95上でも使おうとしたが、MS漢字以外のエンコーディング
を直接扱うには荷が勝ちすぎたので使いどころが少なくなってしまって沙汰止み。
同じく市販のWzエディタを経てxyzzyに出会い今に到る。