函数“reencode-output-port”在Racket中无法正常工作

时间:2017-03-15 08:13:38

标签: racket

我必须在写入文件时转换字符编码,但是当我使用函数“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不包含编码参数?我使用call-with-output-file避免关闭动作,现在我必须面对另一个。

1 个答案:

答案 0 :(得分:0)

这有用吗?

 SELECT wp_wpdatatable_4.remaining, wp_wpdatatable_7.name
    FROM wp_wpdatatable_4
    INNER JOIN wp_wpdatatable_7
        ON wp_wpdatatable_7.name LIKE CONCAT(wp_wpdatatable_4.techsname, '%');

如果您使用除(call-with-output-file "test.txt" (lambda (out) (current-output-port (reencode-output-port (current-output-port) "gbk")) (display "abc") #:exists 'truncate)) 之外的其他编码,会发生什么?