首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符看起来像ASCII 63,但不是,所以我无法删除它

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

Stack Overflow用户
提问于 2014-09-15 06:29:20
回答 3查看 11.5K关注 0票数 5

我正在从文本文件中读取文本。文本文件必须读取的第一个字符串是“Algood”,并注意空格。在记事本中,这个字符串中似乎有一个空格,但它不是。当我在Visual Studio的QuickWatch中测试第6个(从零开始的索引)字符时,它显示为:

代码语言:javascript
复制
"�"c

当我使用Asc函数获取ASCII码时,它告诉我ASCII码是63。63是一个问号。但是,当我测试字符串是否包含ASCII63时,它测试为false。所以看起来字符串包含带有ASCII码63的字符,但它不包含,它包含一些其他字符,测试为ASCII码63。这是一个问题:如果我不知道如何命名这个字符,我就不能删除它。我可以删除最后一个字符,但并不是文本文件中的每个字符串都包含这个字符。

问题是:如果不是问号,这个字符是什么?我如何唯一地标识以便删除它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-15 06:37:40

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

切勿使用Asc()或Chr(),它们是遗留的VB6函数,不处理Unicode。向Asc()传递一个奇特的Unicode代码点总是会生成63,这是"?"c的字符代码,也就是“我不知道你在说什么”。确切的"�"c的概念相同,但使用的是ASCII码。

看到死亡的黑钻石回来总是坏消息,当字符串从底层字节值转换时出现了错误。因为某些字节值没有产生有效的字符。这才是你真正应该寻找的,你总是想要避免GIGO。垃圾入垃圾出是一个丑陋的数据损坏问题,没有赢家,只有受害者。你。

票数 7
EN

Stack Overflow用户

发布于 2019-10-23 18:05:45

我已经在Excel VBA中编写了以下函数,它将删除单个单元格的“黑菱形”。

最困难的事情是不循环所有字段中的每个数字来找到它。我需要一种方法来识别黑钻石,而无需检查所有字段的所有数字。

我使用的是ADODB记录集,如果RS不接受该字符串,这意味着它包含无效字符。然后,它查找ASC(63) =“?”,然后将单元格向下修剪为没有黑色菱形。

这项工作的原因是,当它循环字符串中的每个数字时,它会将黑色菱形识别为ASC = 63。如果是一个真正的问号,RS将接受它。

代码语言:javascript
复制
Private Function Correct_Black_Diamond(ByVal First_Address As Variant) As String
    Dim CheckDigit As Integer
    Dim Temp_string As String
    Dim temp_Rs As New ADODB.Recordset
        temp_Rs.Fields.Append "address", adChar, 9999
        temp_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:
        For CheckDigit = 1 To Len(First_Address)
            If Asc(Mid(First_Address, CheckDigit, 1)) = 63 Then
                Temp_string = Trim(Mid(First_Address, 1, CheckDigit - 1)) & Trim(Mid(First_Address, CheckDigit + 1, Len(First_Address)))
            End If
        Next CheckDigit
        First_Address = Temp_string
        Correct_Black_Diamond = First_Address
        Exit Function

End Function
票数 2
EN

Stack Overflow用户

发布于 2019-10-11 19:04:14

使用:

代码语言:javascript
复制
LDM_MSG.Replace(ChrW(8203), "") 

而不是:

代码语言:javascript
复制
LDM_MSG.Replace(Chr(63), "")

它解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25838639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档