Jul 10

C#中IndexOf("〇")中的奇怪现象 不指定

lee , 19:41 , 开发相关 » C#┋Vb.Net , 评论(5) , 引用(0) , 阅读(629) , Via 本站原创 | |
如下代码,一眼可以看出来输出结果显然应该是-1
static void Main()
{
    int intIndex = -1;
    string strTest = "xxxxx";
    string strMaru = "〇";
    intIndex = strTest.IndexOf(strMaru);
    Console.WriteLine(intIndex);
    Console.Read();
}

然尔今天写代码时候遇到这个诡异的问题,不管如何变换,IndexOf("〇")结果总是0,也就是匹配任意字符串的开始部分.甚是奇怪,至今不明白为什么会是这个结果-_-!
通过IL反汇编得到如下结果:
.method private hidebysig static void  Main() cil managed
{
  .entrypoint
  // 代码大小       37 (0x25)
  .maxstack  2
  .locals init ([0] int32 intIndex,
           [1] string strTest,
           [2] string strMaru)
  IL_0000:  nop
  IL_0001:  ldc.i4.m1
  IL_0002:  stloc.0
  IL_0003:  ldstr      "xxxxx"
  IL_0008:  stloc.1
  IL_0009:  ldstr      bytearray (07 30 )             // .0
  IL_000e:  stloc.2
  IL_000f:  ldloc.1
  IL_0010:  ldloc.2
  IL_0011:  callvirt   instance int32 [mscorlib]System.String::IndexOf(string)
  IL_0016:  stloc.0
  IL_0017:  ldloc.0
  IL_0018:  call       void [mscorlib]System.Console::WriteLine(int32)
  IL_001d:  nop
  IL_001e:  call       int32 [mscorlib]System.Console::Read()
  IL_0023:  pop
  IL_0024:  ret
} // end of method Program::Main

即"〇"对应值是bytearray (07 30 ),初步猜想,此字符应该是特殊字符,在.net编译时做了特殊处理.具体回头查查资料先...
说明一下:"〇"是日文中常用字符,可以通过日文输入法输入maru(まる)得到
Tags:
小麦
2008/07/21 02:12
〇○
提供字符样本测试……你粘贴到notepad和ue看看区别~
lee 回复于 2008/07/21 19:52
应该是日文系统中编码不一样的问题.
我用系统自带的那个日文输入法
小麦 Homepage
2008/07/21 01:51
lee用什么输入法?我用微软日文输入法的,应该也是utf-8的编码了。在ue里面查看○的十六进制码是CB25,il结果也是。程序结果是-1
很可能是日文系统默认的输入法不是utf-8或者有其他类似的字符?
  IL_0009:  ldstr      bytearray (CB 25 )                                           // .%
lee 回复于 2008/07/21 20:58
的确,你的字符和我的出来不一样.まる其他字符都是CBxx,唯独那一个是07 30
bkkkd Email Homepage
2008/07/19 01:22
小卡弟弟.这是什么来的?
lee 回复于 2008/07/20 09:21
c#
yeyo
2008/07/11 16:03
不懂,就是来逛逛Q
lee 回复于 2008/07/11 19:36
欢迎路过
卡喀 Homepage
2008/07/11 00:26
又是看不懂的东东哦!!
lee 回复于 2008/07/11 19:36
入门级,嘿嘿
分页: 1/1 第一页 1 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]