パスワードを忘れた? アカウント作成
13454916 story
Windows

Windows 10のInsider PreviewでシステムロケールをUTF-8にするオプションが追加される 104

ストーリー 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に変換される。

まあどうせ(シンボリックリンクや長いパスサポートみたいに)互換性に問題が出まくって正式版ではマニフェストか何かでオプトインが必要になるのだろうが、現状は控えめに言って最高である。

  • by osdn (47242) on 2017年11月14日 17時08分 (#3312136)

    Windows使ってると、一時的にロカール変更する方法がよくわからなくて時々困るので、
    もう英語UTF-8にしてくれるならそれでもいいかと思いますが、
    SJISの既存ファイルを開けなくなるのであれば困るかなぁ……。

    ここに返信
  • by Anonymous Coward on 2017年11月14日 17時31分 (#3312157)

    が追加されたのビルド16184だったから、結構前から計画はしてたんだろうなあ

    ここに返信
    • by Anonymous Coward on 2017年11月15日 0時14分 (#3312403)

      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]

    • by Anonymous Coward

      C_51932.NLSがどうしてないんだなんて騒ぐ人がいたりしてね。

  • by a1lic (48249) on 2017年11月16日 13時03分 (#3313368)
    Visual C++コンパイラのオプションに/utf-8と/execution-charsetがあったのはこういう事でしたか。
    実装された当時、/utf-8オプション(/execution-charset:.65001)とか絶対化けるだろ、というかAで終わるAPIに渡した文字列をUTF-8として処理出来る設定無いし、どうあがいてもこれの使い道無いだろ…と思ってました。
    ここに返信
  • by Anonymous Coward on 2017年11月14日 17時22分 (#3312151)

    ircクライアントであるところのchocoaが非互換ですね
    もう20年も使ってるのか

    ここに返信
    • by Anonymous Coward

      15年半放置されてるのに最新のWindowsで動くってのはなんというか素晴らしいな。

    • by Anonymous Coward

      ircはチャンネルごとにエンコードの合意があって、chocoaはそれをシフトJISに変換してからwin32 apiに渡してるんだっけか
      ということはwin32がシフトJISを食わなくなるのかな

      • by Anonymous Coward on 2017年11月14日 18時28分 (#3312197)

        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 の時代から何もやり方変わってない。

  • by Anonymous Coward on 2017年11月14日 17時40分 (#3312165)

    / にしていただきたい!!!
    # 更にパスのセパレータを ; から : に!!

    ここに返信
    • by Anonymous Coward on 2017年11月14日 19時36分 (#3312244)

      セパレータと言えばCSV。

      CSVってカンマセパレーテドバリューズの略だとみんな思ってるでしょ?
      けどね、フランス語圏とかドイツ語圏だとCSVファイルと言えばセミコロン区切りのキャラクタセパレーテドバリューズが標準なんですよ。
      彼ら小数点記号にカンマを使ってるからカンマ区切りのCSVだと都合が悪いんですよね。

      • by Anonymous Coward

        へー
        SQLクエリとかスクリプトとか死にそう
        いずこも大変であるなあ

    • Cygwinが死んでしまいます

      • by Anonymous Coward

        今はWSLあるんだからCygwinなんかクソの役にも立たないでしょ要らん要らん

        • by Anonymous Coward

          WSLはファイルI/Oの遅さをなんとかしてもらわないとつらい。

    • by Anonymous Coward on 2017年11月14日 17時56分 (#3312174)

      >更にパスのセパレータを ; から : に!!
      やめてくださいしんでしまいます

    • コマンドラインではスイッチと重なるせいかダメだけど、システムコール上はMSDOSの時代から/でokだった。
      この中途半端な仕様が何十年も保持されていることに驚く。

      環境変数のパスの';'、':'と、%変数名%は、まあ仕方ないんじゃない?

    • by Anonymous Coward

      / にしていただきたい!!!

      0x5C (U+005C) のままで良いので表示を逆斜線にしてほしい。
      円記号は U+00A5 で。

      • by Anonymous Coward

        フォント変えるだけでいいんじゃね?

        #昔自作のbmpフォントでやったなぁ…。

      • by Anonymous Coward

        本当にこれ。なんとかしてくれ

    • by Anonymous Coward

      ファイルパスのセパレータを/にして環境変数のセパレータを:にするってことかね?
      まあファイル名に;を使えるのに環境変数を;で区切るのは悪手ですな。
      個人的には環境変数の区切りは?か|良いように思うが。パット見:よりも目立つので。

      • by Anonymous Coward

        >まあファイル名に;を使えるのに環境変数を;で区切るのは悪手ですな。

        UNIX 系はファイル名に : を使えるけど環境変数のセパレータも : だよ。
        というかファイル名に使えない文字が NUL (0x00) と '/' (0x2F) ぐらいしか無い。

        じゃあ : を含むパスを環境変数で指定する方法があるかというと…
        よく分からないけど無さそう。

        • by Anonymous Coward

          じゃあ : を含むパスを環境変数で指定する方法があるかというと…
          よく分からないけど無さそう。

          csh系のシェルなら空白区切りなので、昔試してできた気がする。

          • by Anonymous Coward

            空白区切りなのは 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

            • by Anonymous Coward
              以下Cygwin上のtcshだけど、できたよ。

              [~/tmp]$ echo $path
              /app/cygwin/emacs/bin /usr/local/bin /usr/bin /app/script /app/vim /home/bin /c/Windows/system32 /c/Windows /c/Windows/system32/Wbem /c/Windows/System32/WindowsPowerShell/v1.0 /usr/lib/lapack
              [~/tmp]$ set path = ( $path ~/tmp/: )
              [~/tmp]$ echo $path
              /app/cygwin/emacs/bin /usr/local/bin /usr/bin /app/script /app/vim /home/bin /c/Windows/system32 /c/Windows /c/Windows/system32/Wbem /c/Windows/System32/WindowsPowerShell/v1.0 /usr/lib/lapack /home/tmp/:

              [~/tm

        • by Anonymous Coward

          区切り文字専用コードがASCIIにあったらこんなのに悩むことは無かったのにな。

          既存文字を区切りに代用した代償。
          まあ仕方ないけどもやっとする。

          • by Anonymous Coward

            '\0' を区切りにすれば良かったんじゃね?(超絶なんとか)

          • by Anonymous Coward

            改行コードは普通ファイル名に使えないのでこれでなんとか

            • by Anonymous Coward

              いや、UNIX系なら普通に使えるよ。

    • by Anonymous Coward

      C:/でもC:\にアクセスできますけど?

    • by Anonymous Coward

      これで都合がよくなるユーザーなんて世界に数%しかいないと知ってるはずなのに、この我儘っぷり

    • by Anonymous Coward

      https://msdn.microsoft.com/ja-jp/library/77859s1t(v=vs.90).aspx [microsoft.com]

      UNIX ではパス デリミタとしてスラッシュ (/) しか使用できませんが、Win32 オペレーティング システムは円記号 (\) とスラッシュ (/) の両方を使用できます。

  • by Anonymous Coward on 2017年11月14日 18時45分 (#3312211)

    次はRTCをUTCにするのかな。現状Liveイメージでデュアルブートすると非常にうざいわけだが。あれはsystemdのせいか

    ここに返信
    • by Anonymous Coward

      何かと思ったら最近のUbuntuはWindowsとデュアルブートだとUTCじゃないんですね。
      Upstartの頃はそんなことなかったのに酷い改悪だなぁ。

    • by Anonymous Coward

      何でもsystemdのせいにする大人の増加

    • by Anonymous Coward

      既にWindowsは条件を満たせばRTCに直接アクセスしないでuefiのGetTime,SetTimeやACPIの_GRT,_SRTを使う実装になっていますよ。

typodupeerror

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

読み込み中...