来自Registry的Byte []只返回一个字母

时间:2011-08-13 14:14:15

标签: c# registry byte return character

我正在尝试从注册表中读取数据@“”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);

提前感谢您的任何帮助:)

2 个答案:

答案 0 :(得分:3)

字符串使用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方块实际上是零字符。

答案 1 :(得分:2)

您确定编码是ASCII吗?

我怀疑某些UTF如Encoding.UTF8Encoding.Unicode - 试试......