我有一个奇怪的问题,我无法解释.我试图操纵一个带有口音的字符串为“é”.该字符串来自输入文件类型的图像的名称.
我不能理解的是为什么当我为强调字符解析时,我的字符串被分为两个字符.以下是一个更好理解的例子:
我的é分为两个字,如e& .
"é".length => 2
utf8有可能涉及吗?
我真的不明白什么!
解决方法
它们被称为
Combining Diacritical Marks.它们是Unicode的“一块”…一些可以在任何角色“链接”的组合变音符号.显然,在这种情况下,字符串的长度是2(因为有e和’.预先配置的字符如àéèìòù已经被保留兼容,但现在任何字符都可以被重音:-)显然,99%不知道,99.9%的程序支持非常糟糕.我相当肯定他们可以用作某个地方的攻击矢量(但我不是偏执狂:-))
我甚至补充说,即使Skeet在2009年也不知道他们如何工作:http://codeblog.jonskeet.uk/2009/11/02/omg-ponies-aka-humanity-epic-fail/
You see,I couldn’t remember whether combining characters came before or after base characters