1 名前:デフォルトの名無しさん [2019/02/27(水) 15:09:08.64 ID:6ExXwgQU.net] Win32APIについての質問はこちらへどうぞ。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。 英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで ■過去スレ Win32API質問箱 Build124 mevius.5ch.net/test/read.cgi/tech/1510395780/ Win32API質問箱 Build123 mevius.2ch.net/test/read.cgi/tech/1475897582/ Win32API質問箱 Build122 echo.2ch.net/test/read.cgi/tech/1451988219/ Win32API質問箱 Build121 echo.2ch.net/test/read.cgi/tech/1438695290/ Win32API質問箱 Build120 echo.2ch.net/test/read.cgi/tech/1428570962/ ■関連スレ Visual Studio 2019 mevius.5ch.net/test/read.cgi/tech/1548765663/ Visual Studio 2017 Part6 mevius.5ch.net/test/read.cgi/tech/1528645068/ 【C++】 DirectX初心者質問スレ Part41 【C】 mevius.5ch.net/test/read.cgi/tech/1521786252/
730 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:09:52.88 ID:4pvDP8OD.net] >>709 んだ >>714 そうだね 単純にそういう話になると思ってたんだが、このスレでこのレベルの未経験者が話しに入ってくるとは思わなかった
731 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:11:27.01 ID:4DbW4sNm.net] はぁ、リンク先も読んでないのかよ >>638 のリンク先読めよ・・・ https://twitter.com/MurakamiShinyu/status/994781934407553024 > 今までデフォルトでShift JISだったもの(メモ帳をはじめ…)が > この設定をすると「メモ帳」の「名前を付けて保存」で「文字コード: ANSI」 > (デフォルト)だとBOM無しのUTF-8、「文字コード: UTF-8」だと > BOM付きのUTF-8のファイルになります。 ↑注意 これは古い話で今は当てはまらない (deleted an unsolicited ad)
732 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:12:17.71 ID:4DbW4sNm.net] >>717 > 単純にそういう話になると思ってたんだが、 その話は当たり前で、LinuxでもmacOSでも同じことになると さんざん言ってる
733 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:17:08.27 ID:4DbW4sNm.net] ちなみに > 標準入力から文字列を受け取ってテキストファイルに追加書き込みする実行ファイル これはコードページとは何の関係もない。 当たり前だがSJISで出力してるアプリは、 コードページをどう変更しようが、SJISで出力される。 「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」に チェックを入れたところで、SJISで出力してるアプリが UTF-8で出力するように変わることはない。
734 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:18:48.31 ID:9NQ9wJPH.net] 設定変更しなければ良い、ってのは利用者の目線で開発者の発想ではないわな
735 名前: mailto:sage [2019/11/26(火) 19:19:13.34 ID:eitz3RWA.net] >>658 >A系アプリってなんだ? A系っていうのはWindows APIのAPIの末尾のAだろ >Windows APIの話なんだからWindowsの話だろ? win32api には同じ api 関数に対して A 系と W 系の二つの異なった関数が準備されているんです A 系の A は ansi の A で、こいつは主にファイルパスに Shift-JIS/cp932 を使うのに対して W 系はファイルパスに utf-16LE を使います
736 名前: mailto:sage [2019/11/26(火) 19:20:16.92 ID:eitz3RWA.net] >>674 win32api に fopen は存在しません、CreateHandle ならば存在しますが
737 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:21:22.69 ID:4DbW4sNm.net] もちろん、「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」 の設定(コードページ)を見て、アプリ内部でその文字コードに変換して 出力するように作られてるアプリは別な。 あくまでA系APIを使ってるアプリの話 SJIS前提で作られてるアプリは、SJISでしか出力しません。 ただしAPIがUTF-8前提として処理するのでASCII以外だと 出力がおかしくなります。
738 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:22:46.52 ID:4DbW4sNm.net] >>722 > A 系の A は ansi の A で、こいつは主にファイルパスに Shift-JIS/cp932 を使うのに対して W 系はファイルパスに utf-16LE を使います うんしってる。そして新設された「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」 というのは、A系を使ってASCII互換のUTF-8を使えるようになる機能です。
739 名前: mailto:sage [2019/11/26(火) 19:22:59.57 ID:eitz3RWA.net] 問題のオプションが A系 W系に関係するものか、誰か見解を出していただけませんか?
740 名前: mailto:sage [2019/11/26(火) 19:24:22.44 ID:eitz3RWA.net] >>725 thanks!
741 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:25:39.71 ID:4pvDP8OD.net] >>718 >>648 読んでる? > すべての A 系 API が UTF-8 を I/O するようになるスイッチやぞ。半端ねぇぞ。 >>719 > その話は当たり前で、LinuxでもmacOSでも同じことになると > さんざん言ってる 今回のWinの設定がなんで他のOSを例に挙げるの?しかもWin32APIの話なのに、どういう関係があるのか? >>720 > 当たり前だがSJISで出力してるアプリは、 > コードページをどう変更しようが、SJISで出力される。 君は、 > すべての A 系 API が UTF-8 を I/O するようになるスイッチやぞ。半端ねぇぞ。 これ自体がウソだって言ってるんだね? ダラダラ連投せずに、そう書けば?
742 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:26:51.40 ID:4DbW4sNm.net] >>728 > 今回のWinの設定がなんで他のOSを例に挙げるの?しかもWin32APIの話なのに、どういう関係があるのか? だから他のOSでも起きる、SJISのファイルにUTF-8で書き込むと壊れるという話を ごちゃまぜにするなと言ってる。 それはWin32APIと関係ない話だと言ってるだけ
743 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:32:03.78 ID:4pvDP8OD.net] >>729 > SJISのファイルにUTF-8で書き込むと壊れるという話を なぜそのようなことが起こるのか、どういうきっかけで起こるのか、影響範囲はどうなっているのか、 A系APIの挙動が変わるからだ という話なだけでしょうが 他のOSを例に出す意味がない 君の主張は、APIの挙動は変わらないということなんだね? 要点をまとめなよ
744 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:36:44.09 ID:4DbW4sNm.net] >>728 > すべての A 系 API が UTF-8 を I/O するようになるスイッチやぞ。半端ねぇぞ。 「ダウト」なのの1つ目は「半端ねぇ」の部分。 A系APIは昔から、コードページの設定をみてそのコードページの文字コードを 前提として処理している。昔から当たり前のことで今更驚くことじゃない。 英語ならASCIIを前提として処理するし、日本語に設定すればSJISを前提として 処理するするようになるし、韓国語や中国語にすれば、その国文字コードを前提して処理する。 20年以上そういう機能だった。 そしてもう一つはI/Oするって所。APIが設定に応じた文字コードを前提とするだけで別にI/Oするわけじゃない。 どの文字コードを使うかはアプリによる。SJIS専用のアプリはSJISしかI/Oしない。 UTF-8を前提としてる状態でSJISを流すとおかしくなるというだけで、 それらのAPIがUTF-8でI/Oするように変わるわけじゃない。 (エラーメッセージとかはSJISのリソースを使うようになるが、 これはAPIが変換してるわけじゃなくコードページに応じたリソースに変えてるだけ)
745 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 19:40:06.72 ID:4DbW4sNm.net] >>730 要点 「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」の設定によるAPIの挙動と アプリが入出力する文字コード(ファイル等を含む)は関係は一切ない アプリが入出力する文字コードはアプリの実装によって決まる。 (Win32 APIと関係ないから、他のOSも同じという話につながる)
746 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 20:15:32.91 ID:9NQ9wJPH.net] APIの挙動変るのはやっぱヤベーな iniから文字列を取り出す >UTF-8 今まで通りSJISだと決めてかかって独自関数でパスの分解などをすると滅茶苦茶になるって話やん これを利用したディレクトリトラバーサルとかも可能なんじゃね?
747 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 21:07:20.59 ID:Qm31cF9G.net] まずは公式ドキュメントを読め 話はそれからだ Visual C++ のテキストと文字列 https://docs.microsoft.com/ja-jp/cpp/text/text-and-strings-in-visual-cpp
748 名前: mailto:sage [2019/11/26(火) 21:10:43.31 ID:eitz3RWA.net] >>734 VC のドキュメントがなんの役に立つ?
749 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:34:01.39 ID:JUtzLycC.net] 他のソースはないかな。 βとはいえMSが単なるロケールの追加じゃなくてそんな過激なスイッチを導入しようとする意図がよくわからん。
750 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:00:16.55 ID:dbvsSdaZ.net] 英語圏だと切り替えても英語入出力だけするなら何も変わらないしメリットの方が多い 日本語圏じゃデメリットしかないがw
751 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:01:00.12 ID:JyI6kWkc.net] >>719 > その話は当たり前で、 本当? SJISアプリをUTF-8アプリとして動作させるんだぜ? printf("あほまぬけ\n"); こんなアプリがあったときに、 設定前と設定後で出てくる文字コードが違うんだぜ? Linuxでそんなことが起こるかよ。
752 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:03:08.88 ID:JyI6kWkc.net] >>737 シングルバイトアプリがマルチバイトアプリとして動くわけ? もっと変なことになるだろそれ
753 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:32:37.50 ID:9NQ9wJPH.net] _tcsincなんかマルチバイト前提にしか使わないような関数だろ
754 名前:ヌんな挙動になるんだ [] [ここ壊れてます]
755 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:33:44.60 ID:4vHYq+aK.net] 「ワールドワイド言語サポートで Unicode UTF-8 を使用」にチェックを入れ なければUnicode非対応のアプリは従来通り動くし、これにチェックを入れな ければ動かない既存のアプリっていうのも現状では無いんでしょう? 非対応アプリを対応させるのに要するコスト以上の利益が今後見込めるなら アプリ開発元も対応させるだろうけど、そうでないなら放置されるんじゃ ないかなあ。 MSがUnicode非対応アプリを切り捨てるようなことをすれば、Windows離れ (=パソコン離れ)が進むだけでしょ。
756 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:36:26.55 ID:JUtzLycC.net] CP1252のアプリにUTF8突っ込まれてもやっぱり困るだけだよなぁ。
757 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:40:34.75 ID:oARfCEQj.net] いきなりなんとかアプリで括るから話が噛み合ってないのでは? まず確認すべきなのはAPIの挙動がどう変わるのかで、 次に典型的なsjisアプリでAPIをどう使っているのか だから影響はこうだみたいな 誰か整理して教えて
758 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:43:29.50 ID:dbvsSdaZ.net] >>738 > printf("あほまぬけ\n"); こんなアプリがあったときに、 設定後は文字化け出力
759 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:56:56.29 ID:4pvDP8OD.net] >>731 こちらの論拠は全てこのツイートにあるしこれベースで話していたわけで、 最初から君の主張がそれなら話が早かったんだけどね 端からAPI関係ないと言われても話が通じず意味不明にしか思わない しかしはっきり言って、どっちも信用ならんw 自分でテストするしかないわもう
760 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:58:07.39 ID:JUtzLycC.net] ググってみて気付いたが一年以上前の話題なのね、これ。
761 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 03:15:27 ID:j6pNPBz/.net] >>738 > 設定前と設定後で出てくる文字コードが違うんだぜ? 違うという証拠は? printf("あほまぬけ\n"); と書いてコンパイルしたとき \0で終わるSJISのバイト列が格納されてるに過ぎない。 それが設定で変わるわけ無いだろ。
762 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 03:32:29.18 ID:j6pNPBz/.net] >>733 > APIの挙動変るのはやっぱヤベーな それは英語圏のASCII前提で作られているアプリでSJISを使うと \(0x5c)が含まれる「表」などで誤動作するって話と同じこと www.kent-web.com/pubc/garble.html > 今まで通りSJISだと決めてかかって独自関数でパスの分解などをすると滅茶苦茶になるって話やん > これを利用したディレクトリトラバーサルとかも可能なんじゃね? UTF-8は文字の一部にASCIIコードが含まれることはないのでそのようなことは発生しない。 というかそもそもが「英語圏で作られた日本語などを扱えないUnixアプリ」でこのような問題が 起きないように考慮されて作られたのがUTF-8だから
763 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 03:36:29.35 ID:h6Shw8l2.net] >>747 A系のAPIがUTF-8に変換されるってのは、そういうことだろう?
764 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 03:37:49.05 ID:h6Shw8l2.net] >>748 >UTF-8は文字の一部にASCIIコードが含まれることはないのでそのようなことは発生しない。 ねぇねぇ? 大丈夫?
765 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 03:56:45.13 ID:j6pNPBz/.net] >>743 > まず確認すべきなのはAPIの挙動がどう変わるのかで、 WindowsはUTF-16。ファイル名などOSから文字列を受け取るときに A系APIを使うとシステムロケールの設定で設定された文字コードに変換されて渡される。 またOSに渡すときはUTF-16に変換される。 これは標準入出力やファイルに出力するときには全く関係ない。 SJIS前提のアプリがSJISで出力するとき(つまりA系APIのみを使ってる) 変換は一切されない。SJISで出力される。 Unicodeに変換されるのはアプリが_setmode等を使ってファイルハンドルを Unicode出力モードに意図的に変更した場合。(OSのシステムロケールの設定で勝手に変わるのではない) そしてこの話はUnicode出力する話で、今はSJISで出力するアプリの話をしてるのだから関係ない。 SJISで出力するアプリはシステムロケールの設定が英語だろうがUTF-8だろうが常にSJISで出力される。 だから英語モードのコマンドプロンプトはSJISを理解できないから文字化けする。 chcpでコードページを932にすると「Unicode出力モードではない出力」は、SJISとして扱うので 出力を "受け取った側" の ”コマンドプロンプトが” Unicodeに変換して画面に出力する。 出力側でAPIが勝手に変換しているのではない。
766 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 03:57:05.53 ID:j6pNPBz/.net] >>750 大丈夫だからなにか言い返せ
767 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 04:00:06.35 ID:j6pNPBz/.net] >>749 > A系のAPIがUTF-8に変換されるってのは、そういうことだろう? 違う。WindowsネイティブのUTF-16が、A系APIを使ったときにUTF-8で渡ってくるというのは APIの引数の話であって、printfなどの標準入出力やファイル入出力とは関係ない。
768 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 04:41:20 ID:h6Shw8l2.net] >>753 printfは内部でWriteFileを呼んでるよ?
769 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 04:46:25 ID:j6pNPBz/.net] そこまで調べたなら、WriteFile、ReadFleには AやWという区別がないところまで調べようか? これはバイナリで読み書きする。必然的に文字コードの変換など起きない。
770 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 07:11:33 ID:h6Shw8l2.net] ところがコンソールに書くときはどうなると思う?
771 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 07:34:16 ID:j6pNPBz/.net] dirコマンドはUnicodeでコンソールに書いている例 cp932でもUnicode文字のファイル名を表示している・ これを踏まえて>>756お前がどうなるのか書けや 実は知らんのだろ?
772 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 09:00:23.34 ID:h6Shw8l2.net] UTF-8は文字の一部にASCIIコードが含まれることはない とか言っちゃう人に説明しても無駄だと思うからやめとく
773 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 09:13:15.33 ID:yBES+u77.net] そこは単なる表現ミスだろww ID:j6pNPBz/ は言ってること基本的にあってる こいつはどうか知らんが、このタイプのやつってやたら自信と知識あるのにプログラミングできないことが多い
774 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 09:29:28.95 ID:naVEM3yc.net] Code Pages https://docs.microsoft.com/en-us/windows/win32/intl/code-pages Many Windows API functions have "A" (ANSI) and "W" (wide, Unicode) versions. The "A" version handles text based on Windows code pages, while the "W" version handles Unicode text. Windows code pages are also sometimes referred to as "active code pages" or "system active code pages". A Windows operating system always has one currently active Windows code page. All ANSI versions of API functions use the currently active code page.
775 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 09:33:42.45 ID:aKqeYuzt.net] 頭でっかちって奴? 装備は良くてもと実力が・・・的な
776 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 10:18:57.48 ID:j6pNPBz/.net] >>758 SJISは「表」のように文字の一部に「\」が含まれることがある。 UTF-8では文字の一部にASCIIコードが含まれることはない。 反例があるならどうぞ
777 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 10:54:33 ID:kdwhCzf5.net] 素人ですまんが"a"の文字コードはUTF8ではどうなるの?
778 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 10:57:33 ID:vWenFewH.net] ASCIIと全く同じ。そして他の文字の一部に含まれることはない。
779 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 11:01:09 ID:aKqeYuzt.net] >>762 \に拘らなくてもダメ文字でよくない?
780 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 11:04:56 ID:vWenFewH.net] >>733が > 今まで通りSJISだと決めてかかって独自関数でパスの分解などをすると滅茶苦茶になるって話やん と書いてるから\にしただけの話 ダメ文字の定義なんて無いし
781 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 11:19:42 ID:BEy4sBWT.net] >>762 マルチバイトの文字の2バイト目以降にASCII文字が含まれることはない、とか言えば相手に誤解されないんじゃないか? 相手が理解してない、間違ってると決めつけるのでなく、自分の意図が正しく相手に伝わってない可能性があることに想像が至らないのかな。 いつも他人と衝突してばかりで(主に周囲の方が)苦労してそう。
782 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 11:38:22 ID:FqMFrKp3.net] APIの挙動は変わらないから問題ないっていうのなら、本件のスイッチはなんの意味が? 実際に、表示に問題が出たりpythonで問題が出たりしてるけど、原因は何? このスイッチで何が起こっている? 本当にロケールの変更だけなのか?問題ないならスイッチなんか付けずに勝手に処理変えていいのでは? この説明をして初めて問題がないという事に説得力が出るんじゃないの?
783 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 11:45:34 ID:fiNnSHXp.net] > APIの挙動は変わらないから問題ないっていうのなら、 誰もそんなこと言ってない。スレ読み返してお前がどれにレスしてるのか言ってみろよ。
784 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 11:48:33 ID:h6Shw8l2.net] >>768 アプリの話だから関係ない。キリッ
785 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 12:07:01.06 ID:kdwhCzf5.net] >>764 つまり、UTF-8にASCIIコードが含まれるんだよね。
786 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 12:22:16 ID:FqMFrKp3.net] >>769 問題ないし関係ない主旨の書き込みを繰り返しされてたよね 要点はこれらしい>>732 >>770 すっごい抽象的で意味分かんないだよね 関係ないって言ってるその内容そのものが一番問題なはずなんだけど
787 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 12:24:39 ID:FqMFrKp3.net] >>769 >>731-732だな
788 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 13:11:10 ID:O313Yaxb.net] まあちゃんと問題切り分けできてないのがヤバイヤバイゆーてるのが気にくわんのとちゃうの なんか知らんがユーザープロファイル壊れたハンパねえとか 具体的な問題点あげさせたら>>754,756みたいにまるで理解してなかったりとか
789 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 13:33:51 ID:aKqeYuzt.net] 自信たっぷりの人ほど自分の説明の仕方を疑わない
790 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 13:44:11 ID:yBES+u77.net] 問題起こす可能性ある行為 文字列に対して0x81〜0x9f以下だからみたいな全角半角判別をする(やりたいならutf16にしてからする) printf("死ね")というようにソースに文字列を直接書く(文字列は必ずリソースから使う。utf8リソースも用意する) 文字列をエンコード変換せずにファイルに書き込む(cp_acp使って変換する)
791 名前:デフォルトの名無しさん [2019/11/27(水) 13:57:22 ID:KtqS+hCI.net] >>701 もしかしてmbcs
792 名前:デフォルトの名無しさん [2019/11/27(水) 14:08:52 ID:KtqS+hCI.net] >>722 LoadLibrary には A と W があるのに GetProcAddress には無いんだっけ なんでだろ LoadModule は忘れた
793 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 14:16:45 ID:VAJZLvH1.net] LoadLibraryの引数はファイル名なんだから9xとNTで文字コードが違うけど GetProcAddressの引数の関数名はASCIIしかないからでしょ
794 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 14:17:12 ID:sIfFpL55.net] ユニコードビルドのプログラムならまず問題は起きんよ あえてCHARを使うケースなんて限られているしそういうとこはAPIを介することもない printfなんか使わず_tprintf使うしな 問題は過去に作られたマルチバイトビルドのモノ
795 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 14:19:26 ID:VAJZLvH1.net] Unicodeしか対応するつもりがないのでwprintfを使う。
796 名前:デフォルトの名無しさん [2019/11/27(水) 14:22:05.53 ID:KtqS+hCI.net] CP_ACP を使うのは別に悪くないぞ active code page なんで文字通り動作時の CP に合わせて 良きに計らって変換してくれる CP が utf-8 なら 入力も出力も CP_ACP で utf-8 と変換 CP が cp932 なら 入力も出力も CP_ACP で cp932 と変換 これは正しい動作 ただしソースが SJIS 固定で書かれてるのに CP_ACP 使って Unicode に変換して出力してる糞ソフトは可笑しくなる
797 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:06:32 ID:FX4WAgVx.net] CP_ACPってGetACPで返ってくるのと同じものだろ? active code page じゃなくて ansi code pageの略みたいだけど これchcpしたコマンドプロンプトから呼び出しても変わってないやん。 これWin9x系対応かつ多言語対応のGUIアプリを作るときしかまともに使えないんじゃね? 今どき多言語対応にするならUnicode使うだろうし、古いアプリの メンテナンスなら仕方ないけど、20年近く前のアプリ?w 今の時代にcp932が登場するとしたら、バッチファイルから実行される コンソールアプリぐらいだろうけど、chcpで変わらないのだから chcpのデフォルトになってしまうCP_ACPでは機能不足だよ
798 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:10:40 ID:FX4WAgVx.net] >>771 「表」に含まれる「\」のようにASCIIコードが文字の一部には含まれることはない
799 名前:デフォルトの名無しさん [2019/11/27(水) 15:10:52 ID:KtqS+hCI.net] それはコマンドプロンプトが糞なんや
800 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:15:40.12 ID:KOWJoLHR.net] >>785 それではどう直せば満足なわけ?
801 名前:736 mailto:sage [2019/11/27(水) 15:22:07.89 ID:KOWJoLHR.net] 互換性無視してもいいので
802 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:22:13.10 ID:yBES+u77.net] setconsoleoutputcpとかいくつかあるだろ
803 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:23:06.36 ID:I8EYSxvC.net] >>784 そんな素人にとってすら常識なことを言わないでくれ。
804 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:30:16.22 ID:KOWJoLHR.net] >>788 つまりCP_ACPじゃなくてSetConsoleOutputCPを使っていう話だよね
805 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:49:28.45 ID:yBES+u77.net] >>776 はファイルに書き込む話だからcp_acp。setconsoleじゃない
806 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 22:17:44.20 ID:ynQDuheL.net] これって将来OS内をutf8にする布石だったりする?
807 名前:デフォルトの名無しさん mailto:sage [2019/11/28(Thu) 00:22:55 ID:uZo2jF8i.net] ありえない。意味がない。
808 名前:デフォルトの名無しさん [2019/11/28(木) 03:45:07.96 ID:63QrZJYD.net] 質問 1..ソースファイルのフォーマットはどうするべき 2.StringCchPrintfAはcrtに丸投げしているようだが使っていいのか
809 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 08:26:03.14 ID:NFB6hYx8.net] ソースのエンコードなんてどうでもいいよ APIの挙動は何も変わらないからStringCchPrintfA使っても問題ない いわゆるc言語の教科書に書かれてるようなソース書いてたら問題起きる ローカライズ、グローバライズ、多言語、その辺を意識する必要があるってだけ
810 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 09:34:08.69 ID:uZo2jF8i.net] >>794 どうせVisual Studio使うんだろ? ならソースコードのエンコードはデフォルトのUTF-8(BOM、シグネチャ付き) UnicodeでないとUnicode文字が書けないだろ? ソースコードにASCII文字しか書かないなら、UTF-8でもいいがそれは 結局SJISと同じになるので区別がつかない。SJISと誤判断されないようにBOM付きが良い。 StringCchPrintfAではなくStringCchPrintfWを使え。 今どきはUnicode対応だろ。いつまでも9x対応にしなくていい。
811 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 09:35:39.32 ID:uZo2jF8i.net] 改行コードは、Windowsしか使わないならCR LFでいいが、 俺はWSLからも参照するのでLFにしてる。
812 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 11:01:30.14 ID:XyamUy6x.net] linuxのツールなら大抵どっちの改行もOKでしょ windowsはCR LFだけってのが多いけど
813 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 11:13:16.22 ID:uZo2jF8i.net] LinuxのシェルスクリプトはCR LFだと動かないぞ むしろWindowsツールのほうが両対応してるのが多い
814 名前:794 mailto:sage [2019/11/28(木) 13:58:18.73 ID:63QrZJYD.net] >>795 strsafe.hを眺めると、StringCchPrintfはAPIではなく、_vsnprintf_sに行き着くように見えるのだが、そのまま使ってよいのか >>796 char[]でファイルとやり取りする仕様なのでUnicodeにはできない BOM付きUTF-8には抵抗がある
815 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 14:39:08.15 ID:d38/0Efq.net] >>800 ソースコードの文字コードとコードは関係ない。 > char[]でファイルとやり取りする仕様なので ファイルとやり取りする所だけ変換すればよい ってか、本当にUnicode非対応のアプリ作ってるのか?
816 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 14:41:36.77 ID:d38/0Efq.net] > StringCchPrintfはAPIではなく、_vsnprintf_sに行き着くように見えるのだが、 正直、StringCchPrintfがなんでAPIなのかの理由のほうがわからんのだがな 処理内容的にOSとやり取りする理由がないので APIやない方が理解できる。 というかMS専用関数じゃなくて_vsnprintf_s使ったら? まあ俺はC++使うんだけどさ。std::wstringとか
817 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 10:03:10.42 ID:zAKbhIi4.net] APIだと脆弱性見つかった時の修正が楽 組み込み関数だと全アプリ作者に修正促さないといけないし、現実的に脆弱性の修正不可能だからな
818 名前:デフォルトの名無しさん [2019/12/03(火) 00:42:13 ID:VF2M+VnQ.net] 現在のウィンドウのIMEの種類を取得する方法ってありますか? 「やりたいこと」 今使用しているIMEがGoogle Japanese IMEかMS IMEなのかどうか知りたい。 ローマ字やかな入力などの情報ではなく、MS IMEや Google IMEなどのキーボードレイアウト?の情報がほしいのです。 GetKeyboardLayout関数などを使用してみたのですが、言語別のキーボードの情報を知ることはできるのですが、日本語キーボードのIMEはどちらも同じ値しか取得できません。 調べてもなかなか分からず困っています。Win32 APIで取得するにはどうしたらいいですか?
819 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 02:11:28.50 ID:rgVievzQ.net] ワシは諦めてユーザーに選択させた
820 名前:デフォルトの名無しさん [2019/12/03(火) 06:40:02 ID:Ocr+v9UU.net] utf-8 BOMをエラーにするのは正義の戦士だからでは。
821 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 07:22:13.61 ID:JICZN31D.net] >>804 ImmGetDescription
822 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 10:43:37 ID:K+LsX9hM.net] どうもありがとうございます
823 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 17:27:04.61 ID:pBYkh1q9.net] ディスプレイの解像度の変更をSetDisplayConfigで作成しましたがDPIの変更の方法が分かりません DPIを変更するAPIはありますか?
824 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 18:09:06.28 ID:+TqcdXsD.net] >>809 https://stackoverflow.com/questions/35233182/how-can-i-change-windows-10-display-scaling-programmatically-using-c-sharp
825 名前:デフォルトの名無しさん [2019/12/04(水) 18:39:47.52 ID:6HAN0Ali.net] >>807 回答ありがとうございます。 その関数も試してみたのですがどうやっても取得できず、もうお手上げ状態なので諦めました。
826 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 01:17:52 ID:PaDa/vrn.net] >>810 サンクス 非公開のAPIなんだね 何とか頑張ってみる
827 名前:デフォルトの名無しさん [2019/12/12(木) 14:53:42.50 ID:b3wcvAqB.net] クリップボードのデータのtextって毎回上書きですか? 何回分かのスタックになってないのですか?
828 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 15:13:04.80 ID:xAqeogD1.net] >>813 なってない。 というか、クリップボードはテキストとか関係無く毎回上書きされる。 クリップボードに何かが入った時を監視してそれを保存するアプリは組めるし、実際にそういうのもある。
829 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 15:33:11.62 ID:Op4VISj2.net] SetClipboardViewer で クリップボード内容の更新の毎に WM_DRAWCLIPBOARD が飛んでくるようになる
830 名前:デフォルトの名無しさん [2019/12/12(木) 15:50:22.24 ID:Lo+C9eAO.net] 秀丸のコピペとか他のエディタ(viとかemacs)のコピペとかでも winのクリップボードと共有されてるときと無関係なときがあって 良く判らん