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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
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
(1): 712 [sage] 2011/12/18(日) 01:55:56.12 AAS
>>712
> MSゴシックだとたまたま全角中点に見えるだけで、

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

つまり 「テ・・ス・・ト・・」 と表示されているように見えます
730: 712 [sage] 2011/12/18(日) 19:04:38.59 AAS
年収100万切ったら、Haskell なんかやってる場合じゃないと思うんだ
731
(1): 712 [sage] 2011/12/18(日) 19:08:03.37 AAS
それはそうと、私の質問 >>712 はだれか分かりませんか

一応あれから色々やってみて、wtiteFile など使えば、
UTF-8 でファイルに保存できることは確認しましたが、
それで済ますならコンソールをわざわざ UTF-8 に切り換えなくても良いわけで、
なんとかコンソールに普通に表示させたいです
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(正確には >>713)のように日本語部分だけ各日本語文字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" に設定
754: 712 [sage] 2011/12/19(月) 18:48:59.59 AAS
>>753
753(1): デフォルトの名無しさん [sage] 2011/12/19(月) 18:36:53.90 AAS
haskellでWEBアプリって簡単にでける?
作ってる奴いるか?
snap とかのフレームワークを使え

簡単かどうかは気分次第
755
(1): 712 [sage] 2011/12/19(月) 18:51:02.49 AAS
>>740
740(1): デフォルトの名無しさん [sage] 2011/12/19(月) 03:22:15.55 AAS
これってコマンドプロンプト側の問題じゃなかったっけ・・・
他の言語でも似たようなことになった記憶が
申し訳ないがhaskellでの解決法は知らない
そうですか

私も心が挫けそうで、もう諦め気味です
Windows 標準搭載のコマンドプロンプト以外のコンソールでもダメだったら諦めます
760: 712 [sage] 2011/12/20(火) 12:36:53.70 AAS
7.2 はライブラリの方がまだ追いついていない場合が多い
base のバージョンとかコンパイル仕様の変更とか
761: 712 [sage] 2011/12/20(火) 12:40:57.01 AAS
>>755
msys とかでもダメっぽいんで、もう諦めました
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.039s