[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
738
(1): 712 [sage] 2011/12/18(日) 21:56:10.45 AAS
>>736
736(1): デフォルトの名無しさん [sage] 2011/12/18(日) 20:27:25.38 AAS
>>731
もっと詳細を書いてくれないと、同じ環境で同じ問題にぶち当たった人しかアドバイスできないよ。
すいません

まず最終的にやりたいことは、PostgreSQL に作ったテーブル内のデータが UTF-8 の日本語で、
その文字列データを取得してコマンドプロンプトに表示するプログラムをHaskellで作る
ということ

Haskell コード内でその文字列データ([Char] 型)を変数に束縛するとことは問題なくできた
というのも、その変数に System.IO.writeFile 関数を適用して得られたファイルを見ると、
正しく UTF-8 エンコードの日本語になっていたから
(当然だけど、writeFile の前に hSetEncoding 関数を utf8 に適用している)

コマンドプロンプトの方は、cmd.exe へのショートカットファイルのプロパティで
[オプション タブ]-[現在のコードページ] を "932" に、
[フォント タブ]-[フォント] を "MS ゴシック" に、
[ショートカット タブ]-[リンク先] を "%windir%\system32\cmd.exe "/K chcp 65001" に設定

このプロパティでコマンドプロンプトを起動し、その上で ghci を立ち上げ、
自作の *.hs ファイルをロードして、関数を評価しているが、
先ほどの [Char] 型の変数を ghci 上で評価すると utf-8 文字がエスケープされる
( ascii 文字以外は \ マークと数字数桁で表示される)

同じ [Char] 型の変数に putStrLn 関数を適用すると、
>>712
712(9): デフォルトの名無しさん [sage] 2011/12/18(日) 01:52:22.20 AAS
Windows + ghci での日本語表示について質問です

コンソールの文字コードを cp65001 (UTF-8) に変えて、
フォントも UTF-8 が表示できる [MS ゴシック] を使ってます

Haskell 関係無しに、コンソール上で type "ファイル名" とコマンドを打てば、
UTF-8 エンコードされた日本語テキストファイルは問題なく表示されます

この状態で ghci を立ち上げて、
s = "テスト" と記述された hs ファイルをロードし、
putStrLn s とすると、「テ・・ス・・ト・・」と表示されます

どうして余計な文字まで表示されるのでしょうか

ちなみに、実際のところ余計な文字は全角中点「・」ではなく「�」です
MSゴシックだとたまたま全角中点に見えるだけで、何か別の文字みたいです

[環境]
Windows 7
GHC 7.2.2
(正確には >>713
713(1): 712 [sage] 2011/12/18(日) 01:55:56.12 AAS
>>712
> MSゴシックだとたまたま全角中点に見えるだけで、

すいません
コンソールの表示をよく見たら、全角ではなく「半角中点」に見えます

つまり 「テ・・ス・・ト・・」 と表示されているように見えます
)のように日本語部分だけ各日本語文字1字に対して
余計な文字が2つずつ後に付随してくる(まぁエスケープに比べて読めなくはない)

どうすれば、コマンドプロンプト(コンソール)に UTF-8 日本語を正しく表示できるのだろうか

上記の現象はデータベース処理とは関係なく、UTF-8 エンコードされた
Haskell プログラムが書かれたファイル内に直接 s="テスト" と書いて、
それを ghci 上で同じように評価したりしても再現できるため、
>>712 では現象再現のための最低限の情報だけで質問しました
739: 712 [sage] 2011/12/18(日) 21:58:27.43 AAS
>>738
訂正

> [ショートカット タブ]-[リンク先] を "%windir%\system32\cmd.exe "/K chcp 65001" に設定

[ショートカット タブ]-[リンク先] を "%windir%\system32\cmd.exe /K chcp 65001" に設定
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.040s