从注册表读取字符串值,但结果包含一些奇怪的字符
本文关键字:包含一 字符 结果 读取 注册表 字符串 | 更新日期: 2023-09-27 17:54:48
我正在使用Registry.GetValue
从注册表中读取字符串值,我得到的结果似乎有一些我从注册表编辑器中看不到的"不可见"字符。
例如,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"
您可以在参考源代码中看到,GetValue
使用RegQueryValueEx
从注册表中读取完整的值。
然后根据RegQueryValueEx
返回的注册表类型(作为输出参数)将此数据转换为目标c#类型。
所以你看到的是真正写入注册表的内容。在regedit中看不到'0j
,因为这个工具是使用零终止字符串实现的。因此,regedit"认为"字符串在'0
处结束,而不显示它。
但是由于GetValue
读取真正存在的内容,您的输出是正确的。c#不使用'0
作为字符串终止字符。
当然,我不能告诉你是谁把这些数据写进了你的注册表,也不能告诉你这是否有效。(它实际上可以被应用程序用作某种奇怪的隐藏信息,以验证该值是由该应用程序编写的)