我正在尝试在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渲染。