修改/更新: 谢谢大家的回复。我知道我太模糊了,但不确定在这种情况下发布裸线代码是否有用。
在我的.vb
文件中,我有一个下拉控件,其验证值为:
TempUnit.DataSource = {"°C", "°F", "°R", "K"}
...存储在变量中:
Dim unit As String = TempUnit.SelectedItem.ToString
...它与其他变量一起传递给函数:
Function xxx(..., ByVal unitT As String) As Double
...最终调用.fs
文件并使用以下方法进行评估:
let tempConv t u =
match u with
|"°C" -> t * 9.0 / 5.0 + 32.0
|"°R" -> t - 459.67
|"K" -> t * 9.0 / 5.0 - 459.67
|_ -> t
如果选择了开尔文以外的任何温度单位,则匹配失败并默认为其他情况(在此上下文中为华氏温度)。我最终通过评估子字符串来绕过度数符号:
Dim unit As String = TempUnit.SelectedItem.ToString.Substring(1)
该程序再次运行,但我不知道我改变了什么,如果有的话,使字符串匹配停止工作。我尝试的第一件事是从一个文件复制/粘贴到另一个文件,以确保它们是相同的字符串,除了尝试其他符号,但无济于事。学位符号引起了我的注意,但随后我检查了压力单位并发现了与微前缀完全相同的问题。
谢谢你,Hans Passant,我想到了unicode作为一种可能的解决方案,但在当下的热度中它似乎并不是一个简单的解决方案。感谢您的链接。
原帖: 我有一个VB程序引用存储在F#库文件中的函数,其参数包含包含特殊字符的度量单位字符串(例如“°C”“μBar”)。
.vb
和.fs
文件中的字符串相同;直到F#库文件因我不知道的原因而停止识别Alt-Code字符时才会出现问题。
如果我从F#和VB文件中的字符串定义中删除有问题的Alt-Code字符,程序将按预期工作。
在碰巧包含Alt-Code字符的两个相同字符串之间会导致匹配失败的原因是什么?
在F#(以及VB)中处理Alt-Code字符的正确方法是什么?
答案 0 :(得分:10)
μ字形有点臭名昭着。 Unicode有两个看起来像这样的代码点:U + 03BC =“希腊小写字母Mu”和U + 00B5 =“Micro sign”。一个是希腊字母表中的一个字母,另一个是经常出现在数学和单位中的符号。
比较μ和μ。在大多数字体中看起来几乎相同(你可以看到与Segoe UI的区别)并且非常容易欺骗人眼。排版人员坚持说他们不一样,特别是如果他们是我想象的希腊人。计算机也没有,你肯定会遇到的问题。
复制/粘贴或重新输入以修复。 Windows中的Charmap.exe小程序非常方便。