我正在尝试在ColdFusion中标准化字符串。

我想为此使用Java类java.text.Normalizer,因为据我所知,CF没有任何类似的功能。

这是我当前的代码:

<cfset normalizer = createObject( "java", "java.text.Normalizer" ) />
<cfset string = "äéöè" />
<cfset string = normalizer.normalize(string, createObject( "java", "java.text.Normalizer$Form" ).NFD) />
<cfset string = ReReplace(string, "\\p{InCombiningDiacriticalMarks}+", "") />
<cfoutput>#string#</cfoutput>

有什么想法为什么总是输出äéöè而不是标准化字符串?

最佳答案

与Java不同,在ColdFusion中,不需要在字符串文字中转义反斜杠。您当前的正则表达式将不匹配任何以反斜杠开头的内容,因此不会发生替换。

除此之外,您的代码是完全正确的,并且您可以看到在输出时字符串的长度为8,而不是4。这是normalize调用的效果。

但是,请记住,它仍然是原始字符串的等效表示形式,因此无法直观地分辨出差异并不奇怪。这是正确的Unicode渲染。

07-26 09:12
查看更多