Unicode 二三事
来源:互联网 发布:淘宝日本直邮是真的吗 编辑:程序博客网 时间:2024/05/21 05:36
bool
Judge(
string
s1,
string
s2)
{
if
(
string
.IsNullOrEmpty(s1) ||
string
.IsNullOrEmpty(s2))
return
true
;
if
(s1.Length < s2.Length)
return
true
;
var
ci = StringComparison.InvariantCulture;
var
b1 =
string
.Compare(s1.Substring(0, s2.Length), s2, ci) == 0;
var
b2 = s1.StartsWith(s2, ci);
return
b1 == b2;
}
请问以上方法能够返回 false ?
如果可以,请给出相应的 s1 和 s2。
话说某国国防部的机密资料锁在一个保险柜里,需要输入一串密码才能打开该保险柜。
现在我方的间谍想办法搞到了该保险柜智能控制系统的关键源程序代码,如下:
1
2
3
4
5
bool
Locked(
string
key)
{
if
(
string
.Compare(key,
""
, StringComparison.InvariantCulture) != 0)
return
true
;
return
key.Trim(
'\0'
).Length == 0;
}
只要输入适当的 key,使 Locked 方法返回 false 就能打开该保险柜,获取机密资料。
现在就看你的了,赶快给出答案吧。
以上两道题是我于2009年4月份在CSDN论坛上发表的“出一道有关 C# 字符串比较的考题”和“C# 字符串比较问题”中提出的。
现在,让我们先来看一些有趣的 Unicode 字符:
要过年了,大家都坐下来打麻将吧。
上述麻将牌中的“竹”(�)是 U+1F024,HTML 代码表示为: 🀤 。在 C# 语言中表示为: "�" 或者 "\xd83c\xdc24"。
虽然 "\xd83c\xdc24" 只表示一个 Unicode 字符,但是 "\xd83c\xdc24".Length == 2。
还有:
这个 Unicode 区块“组合变音标记”中的字符是解决第一道题的关键。
Judge(
"u\x0308"
,
"u"
)
以上代码就返回 false。
实际上:
"u\x0308".Length == 2
"u\x0308".Normalize().Length == 1
"u\x0308".Normalize() 就是 "\x00fc"
HTML 代码: ü 表示 ü (0x0308 的十进制是 776)
HTML 代码: ü 表示 ü (0x00fc 的十进制是 252)
如下所示:
0 0
- Unicode 二三事
- Unicode
- Unicode
- unicode
- Unicode
- Unicode
- Unicode
- unicode
- UNICODE
- unicode
- Unicode
- unicode
- Unicode
- Unicode
- Unicode
- Unicode
- Unicode
- Unicode
- PageSetupDialog 类的一个 BUG
- 一次程序调试小记
- 浅谈 F# 2.0 的两个运行时
- [翻译] Programming F#
- 浅谈 GetHashCode
- Unicode 二三事
- Creo二次开发——清理多余版本
- .NET Framework CLR 版本检测
- java培训 2015-07-30
- 《.NET探秘:MSIL权威指南》读书笔记
- Microsoft .NET Framework 的版本
- Linux 操作系统下 File.Delete 的表现
- 对 File.Delete 方法的一点看法
- 动态地生成用户输入的函数表达式(C#)