texjporg / tex-jp-build

Minimum source repository to build Japanese TeX processing tools
23 stars 6 forks source link

[dvips] Unicode文字のWindows consoleへのSTDERR出力 #110

Closed t-tk closed 3 years ago

t-tk commented 3 years ago

備忘録を兼ねて書いておきます。

背景: WindowsではUnicode文字をコンソール上でやりとりする場合専用の関数を使用する必要がある。 dvips では今まで入力(stdin)とファイルのオープン(fopen, popen)でUnicode文字に対応済みだが console (stdout, stderr) への出力は未対応だった。 (現状、代替策としてパイプを通じて utf8prin へ渡すとコンソール上の文字化けを防ぐことが出来る。) ※コンソール入出力であっても、パイプ渡しやリダイレクトはUTF-8に対応済み。

今回の方針: stderr への出力に対応する。 kpathsearch にラッパー関数 win32_fprintf(), win32_perror() を追加する。 fprintf(), fputs(), putc() は出力が stderr かつ %s が使われている場合のみラッパー関数へ置き換える。ASCIIであることが明らかならば置き換えない。 perror() は全てwin32_perror() に置き換える。

dvipsでstdoutへ出力する情報は、コンソール上で文字を読み取る必要がある場合がなさそうなので今回対応しない。 afm2tfm は今回対応しない。

t-tk commented 3 years ago

TeX Live svn r57072, r57073 コミット。

t-tk commented 3 years ago

Issueの表題とは少し違いますが、 dvi2tty で STDOUT を経由してWindowsのコンソールに出力する場合について、Unicode文字が出力出来るようにしてみました。 オプション "-Eu -q" で有効になります。

今まで気付いていなかったのですが、 コンソールで事前に chcp 65001 を設定しておくと、従来のソースコードでもSTDOUTに文字化けせず表示できます。 default (-qなしで-Euのみの場合) ではページャー more が起動するようになっていて、その場合でも化けないようにするためには chcp 65001 を設定するしかないようです。

t-tk commented 3 years ago

TeX Live svn r57112 コミット。