Java 在ColdFusion中规范化字符串
我正在尝试在ColdFusion中规范化字符串 我想使用Java类Java 在ColdFusion中规范化字符串,java,string,class,coldfusion,normalization,Java,String,Class,Coldfusion,Normalization,我正在尝试在ColdFusion中规范化字符串 我想使用Java类Java.text.Normalizer,因为据我所知,CF没有任何类似的函数 以下是我当前的代码: <cfset normalizer = createObject( "java", "java.text.Normalizer" ) /> <cfset string = "äéöè" /> <cfset string = normalizer.normalize(string, createObje
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>
#串#
知道为什么它总是输出
而不是标准化字符串吗?在ColdFusion中,与Java不同,您不需要在字符串文本中转义反斜杠。您当前的正则表达式将不匹配任何不以反斜杠开头的正则表达式,因此不会发生替换
除此之外,您的代码是完全正确的,您可以看到输出时字符串的长度是8,而不是4。这是normalize
调用的一种效果
但是,请记住,它仍然是原始字符串的等效表示形式,因此无法直观地分辨差异也就不足为奇了。这是正确的Unicode呈现方式。您的“\\p”
应该是“\p”
。Cf的ReReplace()自动为您转义反斜杠,因此您的“\\p”
被解释为java端的“\\\\p”
一艘班轮:
<cfscript>
var k = "mike's café";
k = createObject( 'java', 'java.text.Normalizer' ).normalize( k, createObject( 'java', 'java.text.Normalizer$Form' ).valueOf('NFD') ).replaceAll('\p{InCombiningDiacriticalMarks}+','').replaceAll('[^\p{ASCII}]+','');
// k is now "mike's cafe"
</cfscript>
var k=“迈克咖啡馆”;
k=createObject('java','java.text.Normalizer').normalize(k,createObject('java','java.text.Normalizer$Form').valueOf('NFD')).replaceAll('\p{incombindingDiaCriticalMarks}+','').replaceAll('[^\p{ASCII}]+','');
//k现在是“迈克咖啡馆”
我建议使用像Junidecode这样的Java库。
它将UTF8和UTF16字符串转换为ASCII7。示例:
- ääöè=aeoe
- 迈克咖啡馆
- ℡ = 电话
- 北亰 = 北京
- 先生。まさゆき たけだ = 武田正之先生
- ⠏⠗⠑⠍⠊⠑⠗ = 总理
- ราชอาณาจักรไทย = 拉赫·阿纳查克拉提
- Ελληνικά=Ellenika
- МчСчa=莫斯科
- 哈亚斯坦
- ℰ奖金-我添加了一个
[^\p{ASCII}]+
来去除非ASCII字符。谢谢,你也帮了我很多忙!仅供参考,您可以使用\P{ASCII}+
而不是[^\P{ASCII}]+
-大写的P
表示否定。让我们来看看。