我在SO上看到了很多关于这个问题的Q& A。我已经使用了一些例子,但有些东西不能正常工作:
def input = 'now is thé timé'
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
以上的输出是
now-is-th-tim
如果我执行以下操作:
String input = 'now is th\u00E9 tim\u00E9'
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
我得到了
now-is-the-time
这就是我想要的。我甚至尝试了以下方法:
def input = groovy.json.StringEscapeUtils.escapeJavaScript('now is thé timé')
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
但我得到
now-is-th\u221A\u00A9-tim\u221A\u00A9
有什么建议吗?
更新:根据评论,我尝试了以下内容:
import java.text.Normalizer
def input = new File('file.txt').text
def results = Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "")
.replaceAll(/ +/, "-")
println results
file.txt包含我在字符串中放置的文本。这是按预期工作的。因此,在groovy中对字符串定义进行编码会发生一些事情。
答案 0 :(得分:2)
鉴于您的第二个代码段有效,我强烈怀疑对于第一个代码段,您在编辑器中使用的编码与Groovy解释器/编译器正在使用的编码不同。
换句话说,问题不在代码的 second 行中 - 它位于 first 行中。你不是从你认为的输入文本开始的。