【问题标题】:C# String ASCII representationC# 字符串 ASCII 表示
【发布时间】:2010-09-11 03:26:51
【问题描述】:

如何将 ASCII 特殊字符(例如 ASCII 值 0x01)插入字符串?

我问是因为我正在使用以下内容:

str.Replace( "<TAG1>", Convert.ToChar(0x01).ToString() );

而且我觉得一定有比这更好的方法。有什么想法吗?

更新:

另外,如果我使用这种方法,我是否需要担心 unicode 和 ASCII 冲突?

【问题讨论】:

    标签: c# regex string ascii


    【解决方案1】:

    我相信您可以使用\uXXXX 将指定的代码插入到您的字符串中。

    ETA:我刚刚对其进行了测试,它可以工作。 :-)

    using System;
    class Uxxxx {
        public static void Main() {
            Console.WriteLine("\u20AC");
        }
    }
    

    【讨论】:

    • '\u'后面的十六进制值是否代表ASCII字符?
    • 如果数字低于 0x80,它会。
    【解决方案2】:

    另外,如果我使用这种方法,我是否需要担心 unicode 和 ASCII 冲突?

    您的第一个问题将是您的标签与 ASCII 冲突。到达 TAG10 后,您将与 0x0A 发生冲突:换行。如果您确保您永远不会获得超过九个标签,那么您应该是安全的。当字节值介于 0 和 127 之间时,Unicode 编码(或者更确切地说:UTF8)与 ASCII 编码相同。它们仅在设置最高位时有所不同。

    【讨论】:

      【解决方案3】:

      我觉得一定有更好的 方式比这。有什么想法吗?

      您似乎在尝试使用文本工具处理二进制块。例如,如果您想插入字节 0x01,则您不再处理文本,因为您不在乎该字节 可能 代表什么,而且看起来您不关心甚至关心您将输出哪种编码。

      更好的方法是将您正在操作的东西视为二进制数据块,这样您就可以轻松地插入位和字节,而无需使用脆弱的解决方法并担心副作用。

      【讨论】:

      • '\u0001' 是一个有效的 Unicode 代码点。文本/二进制是语义问题。
      • @SebastianGodelet,不是真的。 Unicode 代码点仅通过 Unicode 转换格式映射到字节。对于上面的示例,Unicode 代码点 u+0001 由 some 翻译格式中的字节 0x01 表示。所以从技术上讲,当操作一个二进制块时,你可以弄清楚代码点和翻译格式的组合将映射到你想要插入的二进制序列 - 如果有这样的组合。几乎没有语义。 :)
      • 好吧,但是 OP 已经在字符串上运行了。因此,他希望不要将二进制数据放入字符串中。由于 .NET 字符串使用 UTF-16,\u0001 是描述相同 ASCII 控制字符的有效字节序列。
      • @SebastianGodelet,OP 只是技术上对字符串进行操作。他们真正试图做的是将二进制数据放入一个字符串中,例如值“0x01”。对于 ,OP 将输入 0x02,依此类推。 (附带说明,.NET internally 使用 UTF-16 的事实与此处无关 - 由于 Convert.ToChar() 的工作原理,OP 的示例将按照您所说的进行操作,将参数视为Unicode 代码点编号。)
      猜你喜欢
      • 2010-11-13
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 2015-08-03
      • 2010-11-08
      • 2023-03-31
      相关资源
      最近更新 更多