gpt4 book ai didi

emacs - 如何在 Clojure 正则表达式中使用 unicode (UTF-8) 字符?

转载 作者:行者123 更新时间:2023-12-02 01:47:36 24 4
gpt4 key购买 nike

对于你们这些非常友善的 Stacked Overflow Wizards 来说,这是一个双重问题。

  1. 如何设置 emacs/slime/swank 在与 Clojure 交互时使用 UTF-8,或在命令行 REPL 中使用 UTF-8?目前我无法将任何非罗马字符发送到 swank-clojure,并且使用命令行 REPL 会出现乱码。

  2. 对拉丁文本执行正则表达式非常容易:

    (re-seq #"[\w]+""日语句子真的不需要空格吗?")

但是如果我有一些日语怎么办?我认为这会起作用,但我无法测试它:

(re-seq #"[(?u)\w]+" "日本語 の 文章 に は スペース が 必要 ない って、 本当?")

如果我们必须使用字典来查找断词,或者自己查找仅片假名的单词,那就会变得更加困难:

(re-seq #"[アイウエオ-ン]" "日本語の文章にはスペースが必要ないって、本当?")

谢谢!

最佳答案

恐怕无法使用 swank 或 Emacs。我在 NetBeans 上使用 Enclojure,它运行良好。

关于匹配:正如 Alex 所说,\w 不适用于非英语字符,甚至不适用于西欧的扩展拉丁字符集:

(re-seq #"\w+" "prøve")  =>("pr" "ve")   ; Norwegian
(re-seq #"\w+" "mañana") => ("ma" "ana") ; Spanish
(re-seq #"\w+" "große") => ("gro" "e") ; German
(re-seq #"\w+" "plaît") => ("pla" "t") ; French

\w 会跳过扩展字符。使用 [(?u)\w]+ 没有什么区别,与日语相同。

但请参阅this regex reference : \p{L} 匹配字母类别中的任何 Unicode 字符,因此它实际上适用于挪威语

(re-seq #"\p{L}+" "prøve")
=> ("prøve")

以及日语(至少我想是这样,我看不懂,但似乎在大概范围内):

(re-seq #"\p{L}+" "日本語 の 文章 に は スペース が 必要 ない って、 本当?")
=> ("日本語" "の" "文章" "に" "は" "スペース" "が" "必要" "ない" "って" "本当")

还有很多其他选项,例如组合变音标记等的匹配,请查看引用资料。

编辑:有关 Java 中 Unicode 的更多信息

使用 Unicode 时其他潜在兴趣点的快速引用。

幸运的是,Java 通常可以很好地以适合位置和平台的正确编码读取和写入文本,但有时您需要覆盖它。

这都是 Java,其中大部分内容都没有 Clojure 包装器(至少现在还没有)。

Java 字符/字符串内部为 UTF-16。 char类型(及其包装Character)是16位,不足以表示全部Unicode,因此许多非拉丁文字需要两个字符来表示一个符号。

处理非拉丁 Unicode 时,通常最好使用代码点而不是字符。代码点是表示为 int 的一个 Unicode 字符/符号。 String 和Character 类具有在Java 字符和Unicode 代码点之间进行转换的方法。

我把它放在这里是因为我偶尔需要这些东西,但频率不足以真正记住每次的细节。这是给 future 的自己的一个注释,对于其他开始使用国际语言和编码的人来说也可能有用。

关于emacs - 如何在 Clojure 正则表达式中使用 unicode (UTF-8) 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3101279/

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