gpt4 book ai didi

clojure - 翻译字符串的编码

转载 作者:行者123 更新时间:2023-12-02 07:29:05 25 4
gpt4 key购买 nike

我有一个采用 Windows-1252 编码的字符串,但需要转换为 UTF-8。

这是一个修复 UTF-8 文件的程序,该文件的字段包含以 quoted-printable 编码的俄语文本。 Windows-1252。这是解码 quoted-printable 的代码:

(defn reencode
[line]
(str/replace line #"=([0-9A-Fa-f]{2})=([0-9A-Fa-f]{2})"
(fn [match] (apply str
(map #(char (Integer/parseInt % 16)) (drop 1 match))))))

这是最终的代码:

(defn reencode
[line]
(str/replace line #"(=([0-9A-Fa-f]{2}))+"
(fn [[match ignore]]
(String.
(byte-array (map
#(Integer/parseInt (apply str (drop 1 %)) 16)
(partition 3 match)))
"Windows-1252"))))

它使用 (String. ... "Encoding") 在所有连续运行的引用可打印编码字符上修复编码。原始函数尝试解码对,因此它会跳过诸如 =3D 之类的内容,这是 = 的引用打印实体。

最佳答案

从磁盘转换 Windows-1252 字符串的最佳方法是使用底层 Java 原语。

(def my-string (String. bytes-from-file "Windows-1252"))

将返回一个 Java 字符串,该字符串已使用 Windows-1252 Charset 解码字节。 。从那里您可以使用 UTF-8 编码将字节吐出

(.getBytes my-string "UTF-8")

更仔细地解决您的问题,如果您有一个包含混合编码的文件,那么您可以计算出每种编码的分隔符,并使用上面的方法分别读取每组字节。

编辑:Windows-1252 字符串已用带引号的可打印内容进行编码。您首先需要使用您的函数或更佳地使用 Apache Commons Codec 对其进行解码。使用 QuotedPrintable decode ,传递 Windows-1252 字符集。这将返回一个 Java 字符串,您可以直接对其进行操作,无需进一步转换。

注意对于某种类型安全措施,您可能应该使用 Java Charset指定要使用的字符集时使用对象而不是字符串(String 类可以采用任一字符集)。

关于clojure - 翻译字符串的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30205407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com