UTF16(unicode)が使えます。jisではまずいことが多いです。printf("表示");このプログラムは、正しく表示されません。それというのも「表示」の2バイト目には'\'が使われていて、それをエスケープシーケンスとみなされてしまうからです。wysiwyg文字列を用いて、printf(r"表示");のように書けば正しく動作しますが、毎回'r'を指定するのは、どうも気持ち悪いです。「文字列はマジックナンバーの一種であって、コメント以外はソース中に埋め込むな」という意見もあります。私も、それには基本的には賛成ですが、ちょっとしたファイル名ぐらいは直接ソース上に書きたいと思うことがあります。考えると、ソースは、UTF-8かUTF-16。どちらも似たようなものなのですが、DIDEのことを考えると、utf-8を用いたほうが良いです。utf-16では日本語コメントが化けて何やらわかりません。コードを自動認識する」にチェックを入れておけば、BOMのあるなしにかかわらずutf-8をチェックしてくれるので、utf-8を用いることをお勧めします。テキストエディタで、保存するときにunicode形式で保存さえしてやれば、okです。ちなみにUTF-8とUTF-16とは情報欠損なしに相互変換できます。簡単な変換フィルタで、UTF-8からUTF16、あるいはその逆に戻すことが出来ます。std.utfにそれらの関数があります。D言語では、char[]型は、UTF-8を仮定してあり、wchar型はUTF-16を仮定してあります。そこで、""によって囲まれた文字列は自動的にこの種の変換を受けることになります。例)ソースコードをUTF-8やUTF-16で書いた場合。UTF-16に変換された文字列が入る実装までは追いかけてませんが、""で囲まれた文字列は、char[]とwchar[]にcastできる型で、castした瞬間に内容が確定するのでしょうか。UTF-16に変換された文字列でfoo(wchar[])が呼び出されるとなります。この文字列のコード自動変換は、なかなか便利な機能だとは思います。ところが、unicodeでソースを書くと、printf等はmbs(マルチバイト文字列)を渡されると仮定してあるので、正しく表示されなくなります。これは、本来は、言語側が変換をやってくれないといけない処理だとは思うのですが、呼び出されないものは仕方ありません。必要に応じてunicodeからmbsに変換して使うことにします。="こんにちは";printf(toMBSz(s));と書くか、自分でphobosをwrapして、上のようにunicodeを用いているときは、toMBSzを経由して呼び出すようにするか、です。コンパイラ側で対応されるでしょうから、ここでは、お手軽にtoMBSzを呼び出すことにします。..と言ってもtoMBSという関数をこれから作らないといけないのですが。Windows系ならば、WideCharToMultiByte、linux系ならばiconvを用いれば出来るそうですが、Cの標準関数(mbstowcs,wcstombs)を用いて簡単に出来ます。以下は、その実装例です。Windowsとそれ以外を切り分けていますが、分けなくても大丈夫です。setlocaleはスレッドセーフでないため、そのための保護が必要になります。このへんよくわかってません。int);}}///日本語のコード変換を提供する。/**日本語が出ないと嫌なので、簡単な変換関数を用意しました。Unicode文字列を、マルチバイト(shift_jis等)へ変換します。Y.Tさんのコードhttp://hp.vector.co.jp/authors/VA028375/contents/D_try2.htmlを利用させていただいています。<その他、参考ページ。0.77で、std.utfというutf8,16,32の相互変換ライブラリが追加されましたが、mbsには変換できないようなので、上のコードはしばらく必要です。Win9x系でstd.fileが動かない・DMD0.77での話。系のWindowsAPIを呼び出してあります。その結果、std.file.read等は、Win9xでは動きません。*W系のAPIを呼び出してあるのは、たいていstd.fileなので、これの代替手段を用意することにしました。std.file.read等は引数としてchar[]をとります。これは、前述の通りUTF-8だと仮定されています。そこで、std.utf.toUTF16にて、UTF-16に変換して、*W系のWindowsAPIの呼び出しが行なわれています。これに失敗したならば、これをtoMBSzでMBSに変換して、*A系のAPIを呼び出せば良いのです。具体的には以下のようになります。GetLastError());}このように、std.fileを書き換えたものをyaneSDK4Dのy4d_aux/file.dに用意しておきましたので、こちらを使うようにすれば、Win9xでも正しく動作します。groupのほうに投稿して、伺ってます。flagを持たせて1度W系APIに失敗すればAのAPIを呼び出すようにすれば速度的に問題ないだろうし」と、別の内容のスレでWalter氏が答えてますので、この問題については認識しているんだとは思います。そのあと、何度かメールでWalter氏とやりとりして、問題を理解してもらえました。0.78でその修正が来ました。ところが、Win9x系の判定の論理値が逆になっていてWin98なのに*W系のAPIを呼び出していて動かないのです。これについてはレポートしておきましたので、0.79で修正されるでしょう。yaneuraohttp://bm98.yaneu.com/dlang/。