字符看起来像ASCII 63,但不是,所以我不能删除它

问题描述 投票:4回答:3

我正在从文本文件中读取文本。文本文件必须读取的第一个字符串是“ 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 =“在此处输入图像描述”>

问题是:如果不是问号,此字符是什么?如何唯一标识以便将其删除?

vb.net ascii non-ascii-characters
3个回答
6
投票

它是Unicode replacement character,U + FFFD,又名ChrW(&HFFFD)

永远不要使用Asc()或Chr(),它们是不处理Unicode的旧版VB6函数。将奇特的Unicode代码点传递给Asc()始终会生成63,即"?"c的字符代码,也就是“我不知道您在说什么”。 exact的构想与"�"c相同,但改用ASCII码。

看到死黑钻石总是坏消息,当从底层字节值转换字符串时出了点问题。因为某些字节值未产生有效字符。您真正要寻找的是,您始终想避免使用GIGO。垃圾回收垃圾回收是一个丑陋的数据损坏问题,没有赢家,只有受害者。您。


0
投票

用途:

LDM_MSG.Replace(ChrW(8203), "") 

而不是:

LDM_MSG.Replace(Chr(63), "")

它解决了问题。


0
投票

我已经在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 =第一个地址退出功能

结束功能

© www.soinside.com 2019 - 2024. All rights reserved.