Vb.net 语法分析器无法识别破折号

Vb.net 语法分析器无法识别破折号,vb.net,unicode,Vb.net,Unicode,我的程序对物理向量进行计算,它允许从网站进行复制/粘贴,然后尝试自动将它们解析为x、y和z分量。我发现一个网站()有(3,−3,1). 虽然这看起来很正常,但VB实际上无法识别负号。从视觉上看,它比正常的负数长(− 和-,但返回与45相同的Unicode。这张图片显示了文本框中每个字符的Unicode(为了比较,我在前3个字符前面加了一个减号)。另外,在这个网站上,我不得不使用Ctrl+c,因为右键单击显示这不是简单的HTML 一个是有效的(第一个),但第二个给出了如下所示的VB拟合。要么它

我的程序对物理向量进行计算,它允许从网站进行复制/粘贴,然后尝试自动将它们解析为x、y和z分量。我发现一个网站()有(3,−3,1). 虽然这看起来很正常,但VB实际上无法识别负号。从视觉上看,它比正常的负数长(− 和-,但返回与45相同的Unicode。这张图片显示了文本框中每个字符的Unicode(为了比较,我在前3个字符前面加了一个减号)。另外,在这个网站上,我不得不使用Ctrl+c,因为右键单击显示这不是简单的HTML

一个是有效的(第一个),但第二个给出了如下所示的VB拟合。要么它无法编译(如下面的蓝线所示),要么一个简单的赋值(第二个赋值)会破坏我表单上的havok

我试过使用

    vectorString.Replace("–", "-") 
并将目标字符串粘贴在较长的破折号中,并以正常的击键破折号作为替换,但什么也没有发生。我猜是因为它们都有相同的Unicode


有没有办法将较长的无效破折号转换为VB可以识别的破折号?我试着用这个单词喜欢用的破折号来代替减号,结果是Unicode 150。显然至少有三种不同的破折号。有什么想法吗?

来自Math Insight的字符是U+2212,减号。您在
Replace
调用中尝试使用的字符是U+2013,en-dash。这就是你的替代品不起作用的原因


除了标准的ASCII连字符(-,U+0045),还有两个常见的破折号:en破折号(–,U+2013)和em破折号(-,U+2014)。还有一个数字破折号(‒,U+2012),但并不常见。

该“破折号”实际上是真正的减号(U+2212)。我不知道你是如何得到一个字符代码45,但这显然是错误的,因为实际的字符代码是&H2212。顺便说一句,“使用Unicode”没有意义。Unicode是字符编码的标准。你能说的是一个字符有一个Unicode字符代码,我也解释不了。击键破折号为45。U+2212怎么是真正的负号?因为它更大?它是“真实的”减号,因为它是这样指定的。“正常”减号实际上只是连字符破折号(用于连接单词)。它看起来不同于负号。特别是,它通常较短,其垂直位置也不同:减号的垂直位置与加号的中间线相同(且长度相同),而连字符则不同,在大多数字体中为“-+”。至于解决您的问题,
Replace
有效。您只需将结果赋给某个对象即可。@KonradRudolph我想混淆的是,他的代码将两个字符都显示为ASCII 45(如上图所示),这就引出了他如何转换它们的问题。在对每个字符使用Mid()之后,我只使用了Asc()。这实际上是幸运的,因为这是我在TRS-80上学习时使用的相同功能。啊,回忆。。。。。。。这也让我想知道ASCII在Unicode之前很久,所以它似乎是一种传统。是否存在返回Unicode的实际函数,或者ASC是否会对ASCII 255范围以外的字符执行此操作而不会出现问题?是的,就是这样。我需要一段时间才能自己弄明白。谢谢。我正在尝试使用vectorString=vectorString.Replace(Chr(2212),“-”),它会导致VB退出函数。执行就在这里结束,就像使用了Return一样。我做错了什么?@TomK根据的文档,如果提供的字符代码大于255,它会抛出一个异常。相反,使用。此外,U+xxxx代码点是十六进制的,因此您需要使用十六进制表示法
ChrW(&H2212)
或将其转换为十进制
ChrW(8722)
。非常漂亮!谢谢我错了&,但为了确定起见,你把所有的基础都写满了。但是,如果抛出异常,为什么程序会继续?这不是一次尝试。这种情况发生过几次,因此很难追踪错误。是否有选项可以打开以提供异常和行号?