我正在使用Registry.GetValue
从Registry读取字符串值,我得到的结果似乎有一些“隐形”字符,我在注册表编辑器中看不到。
例如,Registry.GetValue
会返回"London\0j"
但我希望它只是"London"
,而在注册表编辑器中,我只能看到值"London"
而没有似乎是字符串末尾的任何东西。如果我将此密钥导出到.reg文件,它也只显示"London"
。我无权写入注册表,因此无法通过导入.reg文件进行测试。
将String.Trim
应用于结果也不起作用。
这是"\0j"
是什么?
编辑:读取键值的代码
var registryValue =
Registry.GetValue(@"HKEY_LOCAL_MACHINE\SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters",
"DynamicSiteName", String.Empty);
导出的.reg文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters]
"DynamicSiteName"="London"
答案 0 :(得分:3)
正如您在reference source GetValue
中看到的那样,使用RegQueryValueEx
从注册表中读取完整的值。
然后根据RegQueryValueEx
返回的注册表类型(作为输出参数)将此数据转换为目标C#类型。
所以你看到的是真正写入注册表的内容。您没有在注册表中看到\0j
,因为此工具是使用以零结尾的字符串实现的。所以regedit“认为”字符串以\0
结束并且不显示它。
但是,由于GetValue
读取确实存在的内容,因此输出是正确的。 C#不使用\0
作为字符串终止字符。
当然,我不能告诉你是谁将这些数据写入你的注册表,以及这是否有效。 (它实际上可以被应用程序用作某种奇怪的隐藏信息,以验证该值是否由此应用程序编写)