Closed t-tk closed 3 years ago
Issueの表題とは少し違いますが、 dvi2tty で STDOUT を経由してWindowsのコンソールに出力する場合について、Unicode文字が出力出来るようにしてみました。 オプション "-Eu -q" で有効になります。
今まで気付いていなかったのですが、
コンソールで事前に chcp 65001
を設定しておくと、従来のソースコードでもSTDOUTに文字化けせず表示できます。
default (-q
なしで-Eu
のみの場合) ではページャー more
が起動するようになっていて、その場合でも化けないようにするためには chcp 65001
を設定するしかないようです。
備忘録を兼ねて書いておきます。
背景: 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 は今回対応しない。