1
ファイルに書き込むときに文字エンコーディングを変換する必要がありますが、fuction "reencode-output-port"を使用すると、文字列の最後の部分はファイルに書き込まれます。機能 "reencode-output-port"がラケットで正しく動作しない
は例えば、私は、コードのこの部分を実行します。
(call-with-output-file "test.txt" (lambda (out)
(display "abc" (reencode-output-port out "gbk"))) #:exists 'truncate)
ファイルtest.txtのは何も含まれていません。
ファイルに十分長い文字列を書き込むと、最後の部分は常に失われます。
私のコードに関する問題はありますか?
新しいファイルポートを閉じなかったことに気付きました。正しいコードは次のとおりです。
再アウト、および行われたときに、それを閉じるために、新しいファイルポートを結合、だ(call-with-output-file "test.txt" (lambda (out)
(let [(re-out (reencode-output-port out "gbk"))] (display "abc" re-out)
(close-output-port re-out)))
#:exists 'truncate)
。
しかし、なぜcall-with-output-fileにエンコードパラメータが含まれていないのでしょうか?私はclose-actionを避けるためにcall-with-output-fileを使用しています。今度は別のファイルに直面しなければなりません。
ありがとう、しかし、それは私が意味するものではありません。 – David
しかし、それは動作しますか?もしそうなら、少なくとも、エンコーディングを行っているライブラリが正しくロードされていることになります。 – soegaard
"reencode-output-port"が正常に動作していることを確認しましたが、問題は新しい出力ポートを閉じなかったことです。私は私のポスト(ポストの後編集)で解決策を説明しました。 – David