我必须在写入文件时转换字符编码,但是当我使用函数“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避免关闭动作,现在我必须面对另一个。
答案 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))
之外的其他编码,会发生什么?