在方案(文件输出端口)中编码“ä”、“ö”、“ü”和“ß”

问题描述 投票:0回答:1

我需要使用包含符号 ÄäÖöÜüß 和 € 的文件(输入和输出)。因此可以将转码器与 latin-1-codec 或 utf-8-codec 一起使用(utf-8 可能是更好的选择)。我不想使用 utf-16 编解码器。虽然文件输入端口工作良好(在方案中编码“ä”、“ö”、“ü”和“ß”(从文件中获取德语文本)),但我无法获取文件输出端口工作。

(define path ... <path to a txt-file containing this text: "äöüß">)

;; Input-Port works fine: 
(define fip (open-file-input-port
         path
         (file-options)
         (buffer-mode block)
         (make-transcoder (utf-8-codec))))

(get-string-all fip) ;; returns: "äöüß"

;; But Output-Port don't:
(define fop (open-file-output-port
         path
         (file-options no-fail)
         (buffer-mode block)
         (make-transcoder (utf-8-codec))))

(put-string fop "äöüß")
(close-port fop) ;; it stores just strange symbols in the txt-file

我不知道为什么它不起作用。试图理解这个问题,我尝试了这个:

(display (string->utf8 "ä")) -> #vu8 (239 191 189)
(utf8->string (string->utf8 "ä")) ;; returns a strange symbol
(utf8->string (string->utf8 "a")) ;; returns "a"

(utf8->string 
 (let-values (((p f) (open-bytevector-output-port
              (make-transcoder (utf-8-codec)))))
   (put-string p "a ä")
   (f))) ;; returns "a <strange symbol>"

我可以读取符号“äöüß”,但无法通过端口写入它们。

scheme
1个回答
0
投票

好的。知道了!我的 IDE (emacs) 的问题所在。 在这里找到解决方案:https://goyoambrosio.com/2018/06/Dealing-with-utf-8-in-Emacs/

© www.soinside.com 2019 - 2024. All rights reserved.