【问题标题】:Byte[] from Registry returns only one letterRegistry 中的 Byte[] 仅返回一个字母
【发布时间】:2011-08-13 14:14:15
【问题描述】:

我正在尝试从注册表 @ ""SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\" 读取​​数据

我得到的返回值是 System.byte[],当我将它转换为类似建议的here 的字符串时。

它有效(我认为)。但我只返回 1 个字母,而不是整个字符串。

也许我做错了什么?我相当肯定那里不可能只有一个字母..

我试过Encoding.ASCII.GetString(bytes);Encoding.UTF8.GetString(bytes);Encoding.Default.GetString(bytes);,但都只返回1 个字符/字母。

我也检查了这个link。但那是 C++ 的,我正在使用 C#,没有看到他们建议的方法 (RegGetValueA)

这是我的代码:

        RegistryKey pRegKey = Registry.CurrentUser;
        pRegKey = pRegKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RecentDocs\\");
        Object val = pRegKey..GetValue("0");

        byte[] bytes = (byte[])pRegKey.GetValue ("0");
        string str = Encoding.ASCII.GetString(bytes);

        System.Windows.MessageBox.Show("The value is: " + str);

提前感谢您的帮助:)

【问题讨论】:

    标签: c# registry byte return character


    【解决方案1】:

    字符串使用 UTF-16 编码,因此您应该使用 Encoding.Unicode

    但它似乎不是 只是 UTF-16 编码的字符串,还有更多数据。对我来说,(当解码为 UTF-16 时),它显示为

    Stažené soubory□Š6□□□□□Stažené soubory.lnk□T□□뻯□□□□*□□□□□□□□□□□□Stažené soubory.lnk□6□
    

    Stažené soubory 在捷克语中表示“下载”,这是我的 Windows 的语言。而上面文字中的U+25A1方格实际上是零个字符。

    【讨论】:

    • 我对编码几乎一无所知。 :( 那里有什么“其他数据”,我也可以访问它吗?对不起,如果我的问题很愚蠢:)
    • 为什么有些地方使用 UTF-16 而有些地方使用 UTF-8,我的意思是这样做的目的是什么?
    • @Lagrangian,(现代)Windows 的本机编码是 UTF-16。我不知道 Windows 中有任何地方使用 UTF-8。
    • @tone7,不知道。尝试搜索或提出其他问题。
    • 我会尝试搜索它 =) 感谢您的时间和帮助。非常感谢!祝你今天过得愉快! :)
    【解决方案2】:

    你确定编码是 ASCII 吗?

    我会怀疑一些 UTF,例如 Encoding.UTF8Encoding.Unicode - 试试看...

    【讨论】:

    • 您好,感谢您的快速回复:D 我尝试了 Encoding.Unicode,它成功了!非常感谢。虽然我确定我确实尝试过。我对 C# 很陌生,对编码知之甚少。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2015-12-21
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多