【问题标题】:Decoding a string in C#在 C# 中解码字符串
【发布时间】:2012-09-06 08:26:25
【问题描述】:

我有一个类似"Akzo_Nobel_N@46@V@46@" 的字符串。

原来的字符串是"Akzo Nobel N.V."

我需要解码它。我试过这样

public static string Decode(string query)
{
    string dSData = HttpUtility.UrlDecode(query.ToString());
    return dSData;
}

我无法将其解码为原始字符串。请帮我解码。

【问题讨论】:

  • 你如何得到这个编码字符串?
  • 你需要找出确切的编码类型——字符串来自哪里,是谁编码的?
  • 你需要特定的模式来解码。总是这种情况还是还有其他情况?
  • @46@ 不是 URL 编码数据,那么您为什么希望 UrlDecode 工作...
  • 这不是标准的 URL 编码,因此 HttpUtility.UrlDecode- 方法不起作用。有没有更详细的编码信息?

标签: c# decode urldecode


【解决方案1】:
public static String Decode(String query) {
    return query.Replace("_", " ").Replace("@46@", ".");
}

更多的输入将提供更好的解码例程。

【讨论】:

  • 这是基于这样的假设,即这是 OP 必须处理的仅有的两个替换。 +1 不过,我猜你知道这一点,而且你的代码是正确的。
【解决方案2】:

如果您要处理的只是空格和句号的“编码”版本,那么只需调用 string.replace 并将“_”替换为“”,将“@46@”替换为“” . http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx。如果您可能遇到其他 ascii '编码',那么您需要使用正确的方法以正确的方式解码(可能来自编码它的同一类/库)。

【讨论】:

    【解决方案3】:

    格式好像是:

    @xx@ 其中 xx 是 ASCII 字符的十进制数(因此 . 是 46),空格被下划线替换。

    看起来像自制的 URL 编码机制,但可能是错误的。

    所以你想要的是一个正则表达式,它查找类似@[0-9]{1,3}@ 的内容并将其替换为由 ascii 代码表示的实际字符。

    除了 _ 之外,可能还有其他直接替换空格的方法,但我只能告诉你这么多。

    【讨论】:

    • 这有什么关系?
    • string.replace 答案只会排序 _ 和 @46@,需要一个正则表达式来根据我确定的编码排序所有潜在值。如果他们解码另一个包含@64@ 的字符串怎么办? (应该是 @ 字符)您需要一个正则表达式来查找所有组合。单独的 string.replace 对查找复杂模式没有用处,但当然你不会将 regexp.replace 用于静态字符串。
    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2014-12-31
    • 2011-10-09
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多