栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何通过字符比较来执行Unicode感知字符?[关闭]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何通过字符比较来执行Unicode感知字符?[关闭]

编码方式

Unipre定义了一个 字符 列表(字母,数字,字母符号,控制代码等),但它们的表示形式(以字节为单位)定义为 encoding
。如今,最常见的Unipre编码是UTF-8,UTF-16和UTF-32。UTF-16通常与Unipre关联,因为它是在Windows,Java,NET环境,C和C
++语言(在Windows上)中为Unipre支持而选择的。请注意,这不是唯一的一种,并且在您的生活中,您肯定还会遇到UTF-8文本(尤其是来自Web和Linux文件系统的文本)和UTF-32(Windows世界之外)。必读的入门文章:绝对最低限度每个软件开发人员绝对,肯定必须了解Unipre和字符集(无借口!)和UTF-8无处不在-
宣言
。IMO特别是第二个链接(无论您的意见是UTF-8还是UTF-16)都非常有启发性。

让我引用维基百科:

由于最常用的字符全部在“基本多语言平面”中,因此对代理对的处理通常没有经过全面测试。即使在流行且经过充分审查的应用程序软件(例如CVE-2008-2938,CVE-2012-2135)中,这也会导致持续的错误和潜在的安全漏洞。

要了解问题的出处,仅需一些简单的数学运算即可:Unipre定义了大约11万个代码点(请注意,并非所有代码点都是grapheme)。Windows环境下的C,C
++,C#,VB.NET,Java和许多其他语言中的“
Unipre字符类型”(旧ASP经典页面上的VBscript明显例外)使用UTF-16编码,然后是两个字节(此处的类型名称为直观但完全具有误导性,因为它是一个
代码单位 ,而不是字符或代码点)。

请检查此区别,因为它是基础的:代码单元在逻辑上与字符不同,即使有时它们重合,它们也不是同一回事。这如何影响您的编程生活?假设您有此C#代码,并且您的规范(由考虑字符的
真实 定义的人编写)说“密码长度必须为4个 字符 ”:

bool IsValidPassword(string text ) {    return text.Length >= 4;}

该代码是 丑陋的,错误的和残破的

Length
财产申报数量 代码单位
text
字符串变量,现在你知道他们是不同的。您的代码将被验证
n̊o̅
为有效密码(但它由两个字符,四个代码点组成-
几乎总是与代码单元一致)。现在,试想一下将其应用于您的应用程序的所有层:一个经过UTF-8编码的数据库字段,该字段已通过先前的代码(输入为UTF-16)进行了有效验证,错误将累加,您的波兰朋友
ŚwiętosławKoźmicki
对此不会高兴。现在认为您必须使用相同的技术来验证用户的名字,并且您的用户是中国人(但不用担心,如果您不在乎,那么他们将在很短的时间内成为您的用户)。另一个例子:这种简单的C#算法计算字符串中的不同字符将由于相同的原因而失败:

myString.Distinct().Count()

如果用户输入此汉字字符,

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383724.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号