我想编写一个 clojure 函数,它采用一种编码方式获取字符串并将其转换为另一种编码方式。iconv 库就是这样做的。
例如,让我们看一下字符“è”。在 ISO-8859-1 ( http://www.ascii-code.com/ ) 中,这e8
是十六进制的。在 UTF-8 ( http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%C3%A8&mode=char ) 中,它是c3 a8
.
假设我们有 iso.txt,其中包含我们的信件和 EOL:
$ hexdump iso.txt
0000000 e8 0a
0000002
现在我们可以像这样将其转换为 UTF-8:
$ iconv -f ISO-8859-1 -t UTF-8 iso.txt | hexdump
0000000 c3 a8 0a
0000003
我应该如何在clojure中写一些等效的东西?我很乐意使用任何外部库,但我不知道在哪里可以找到它们。环顾四周,我不知道如何在 JVM 上使用 libiconv 本身,但可能还有其他选择?
编辑
在阅读了评论中亚历克斯的链接后,这太简单了,太酷了:
user> (new String (byte-array 2 (map unchecked-byte [0xc3 0xa8])) "UTF-8")
"è"
user> (new String (byte-array 1 [(unchecked-byte 0xe8)]) "ISO-8859-1")
"è"