我正在从文本文件中读取文本。文本文件必须读取的第一个字符串是“ Algood”,并注意spaaaaaace。在记事本中,似乎该字符串中有一个spaaaaaace,但实际上不是。当我在Visual Studio的QuickWatch中测试第6个(从零开始的索引)字符时,它显示为:
"�"c
[当我使用Asc
函数获取ASCII码时,它告诉我ASCII码为63。63是一个问号。但是,当我测试以查看字符串是否包含ASCII 63时,它将测试为false。因此,看起来该字符串包含带有ASCII代码63的字符,只有它没有,它包含一些其他测试为ASCII代码63的字符。这是一个问题:如果不这样做,我将无法删除该字符知道该怎么称呼。我可以删除最后一个字符,但并非文本文件中的每个字符串都包含该字符。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS96Z3dMSS5wbmcifQ==” alt =“在此处输入图像描述”>
问题是:如果不是问号,此字符是什么?如何唯一标识以便将其删除?
它是Unicode replacement character,U + FFFD,又名ChrW(&HFFFD)
。
永远不要使用Asc()或Chr(),它们是不处理Unicode的旧版VB6函数。将奇特的Unicode代码点传递给Asc()始终会生成63,即"?"c
的字符代码,也就是“我不知道您在说什么”。 exact的构想与"�"c
相同,但改用ASCII码。
看到死黑钻石总是坏消息,当从底层字节值转换字符串时出了点问题。因为某些字节值未产生有效字符。您真正要寻找的是,您始终想避免使用GIGO。垃圾回收垃圾回收是一个丑陋的数据损坏问题,没有赢家,只有受害者。您。
用途:
LDM_MSG.Replace(ChrW(8203), "")
而不是:
LDM_MSG.Replace(Chr(63), "")
它解决了问题。
我已经在Excel VBA中编写了以下函数,该函数将删除单个单元格的“黑菱形”。
最难的是不循环每个,而>
私有函数Correct_Black_Diamond(ByVal First_Address为变体)为字符串Dim CheckDigit作为整数Dim Temp_string作为字符串将temp_Rs设置为新的ADODB.Recordsettemp_Rs.Fields。追加“地址”,adChar,9999temp_Rs.Open
temp_Rs.AddNew On Error GoTo Further_Address_Check temp_Rs!Address = First_Address temp_Rs.Update Correct_Black_Diamond = First_Address Exit Function
Further_Address_Check:对于CheckDigit = 1到Len(First_Address)如果Asc(Mid(First_Address,CheckDigit,1))= 63Temp_string =修剪(Mid(First_Address,1,CheckDigit-1))和修剪(Mid(First_Address,CheckDigit + 1,Len(First_Address))))万一下一个CheckDigitFirst_Address =临时字符串Correct_Black_Diamond =第一个地址退出功能
结束功能