【问题标题】:How to deal with special characters in VB.NET如何处理VB.NET中的特殊字符
【发布时间】:2011-07-20 12:32:04
【问题描述】:

我收到了一个文本文件,其中的文本是这样的,ãYAHOO.COM。当我在 Visual Studio 中调试时,我看到的字符值为“�”c。首先,任何人都可以说出雅虎之前的角色是什么。是特殊字符还是一些html字符,我在VS中调试时看到的字符是什么。

原来是这样,字符的 ascii 值为 63。但是当我将值写入文件时,它会生成 3 个字符,其 ascii 值高于 127。非常奇怪

如何在 VB.NET 中处理此问题

【问题讨论】:

标签: html vb.net visual-studio ascii


【解决方案1】:
  1. 找到角色。尝试获取字符的 ASCII 码:

    Response.Write(Asc(YourString.Substring(0, 1)))
    
  2. 清理您的输入字符串。创建一个数组 arrCh() ,其中包含要删除的所有 ASCII 字符并循环遍历字符串:

    YourString = YourString.Replace(Chr(arrCh(i)),"")
    

【讨论】:

  • 尽管有这个名字,Asc 与 ASCII 并没有太大的关系——ASCII 最后一次使用大约是 15 年前。它在 .NET 中不起作用。您的第二项听起来像是不使用正确编码的非常糟糕的解决方法。
  • 1) 康拉德,如果我错了,请纠正我。 ASC 返回字符的十进制 ANSI 代码,该代码又由可打印的 ASCII 代码 (0-127) 和不可打印的 (128-255) 组成。
  • 你错了。正如我所说,ASCII 不再在 .NET 中的任何地方使用(除非您明确将其用作编码)。 AscAscW 都返回 Unicode 代码点,因为 .NET 中的 all 字符串都是 Unicode。巧合的是,前 128 个 Unicode 码点恰好与前 128 个 ASCII 码相同。但是将Asc的返回值描述为ASCII仍然是错误的。特别是,对于任何大于 127 的值,返回值不再相同。 See MSDN.
  • 好的,那么我需要了解 ASC 和 ASCW 之间的区别。此外,在 MSDN 上,如果您选择相同的帮助但针对 VS2005,那么他们会写道 ASC 返回 0 到 255 之间的值,并提供一个指向带有字符代码的 ASCII 表的链接作为参考。看看msdn.microsoft.com/en-us/library/zew1e4wc(v=vs.80).aspx#Y600
  • 确实,MSDN 包含许多正在慢慢修复的错误。您发现一个此类错误已在后续版本中得到修复。
【解决方案2】:

您必须在读取文件时指定正确的编码(与写入文件时使用的相同)。例如,如果您使用 StreamReader 读取文件,您可能会有如下代码:

Dim reader As New StreamReader(myFileStream, System.Text.Encoding.Default)

第二个参数代表编码。这里我们使用默认编码(ANSI)。如果您有一些未知或奇怪的字符使用此编码,您可以尝试使用不同的编码,如System.Text.Encoding.Utf8System.Text.Encoding.Ascii

【讨论】:

    【解决方案3】:

    在记事本中打开文本文件,然后尝试“另存为...”。如果文件是 ANSI 还是 UNICODE?

    如果是 ANSI,则将副本另存为 UNICODE 并使用新文件重试。

    Windows 中可以从 ANSI 文件中显示许多字符,但如果您没有将文件显式定义为 Unicode(由文件前 2 个字节中的值 255、254 标识),Visual basic “拒绝”这样做)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多