在方案中编码“ä”、“ö”、“ü”和“ß”(从文件中获取德语文本)

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

我是计划的新手,并尝试在计划中构建一个简单的应用程序。我想使用简单的文本文件作为数据库,因此程序基本上从文件加载文本,对其执行某些操作并将结果保存到(可能不同的)文件中。我的问题是,我正在处理的文本是德语,所以我需要“latin-1-symbols” ä/ä、Ö/ö、Ü/ü 和 ß。我正在使用 chez 方案,并且我读到了有关转码器(R6RS)的信息,但我无法让它工作。

有人可以给我一个简单的例子,如何在chez方案中的latin-1-codec中获取(输入端口)和保存(输出端口)文本吗?

非常感谢。

根据 R6RS、R6RS-lib 和 Chez-User-Guide 提供的信息,我无法解决问题。在互联网上我找不到任何进一步的解释。如果有人知道学习材料的良好来源,我将不胜感激。

scheme chez-scheme r6rs
1个回答
0
投票

使用严格的 R6RS,您必须使用 4 参数版本的

open-file-input-port
以及由
(make-transcoder (latin-1-codec))
返回的转码器来获取从 ISO-8859-1 转换的文本输入端口。不幸的是,没有
call-with-input-file
with-input-from-file
版本可以让您指定转码器,因此您必须记住手动关闭返回的端口。 Chez 有一个
current-transcoder
参数,可用于更改默认参数,从而允许您使用这些功能。

示例:

#!r6rs

(import (rnrs base)
        (rnrs io simple)
        (rnrs io ports)
        (only (chezscheme) current-transcoder parameterize))

(define filename "sample.txt") ; A file with Latin-1 text

;; Read one line from a port and echo it to current-output-port
(define (echo-line p)
  (display (get-line p))
  (newline))

;;; R6RS
(define p (open-file-input-port filename
                                (file-options)
                                (buffer-mode block)
                                (make-transcoder (latin-1-codec))))
(echo-line p)
(close-port p)

;;; Chez specific
(parameterize ((current-transcoder (make-transcoder (latin-1-codec))))
  (call-with-input-file filename echo-line))
© www.soinside.com 2019 - 2024. All rights reserved.