diff options
author | Matt Wrock <matt@mattwrock.com> | 2016-05-06 13:10:47 -0700 |
---|---|---|
committer | Matt Wrock <matt@mattwrock.com> | 2016-05-06 13:10:47 -0700 |
commit | 4ce6ecc143c46c8c0c4ec20c7a727c20f2aa1b59 (patch) | |
tree | f1a24ace1d927bc37ded79ce9923ef75a676272e /lib/chef/monkey_patches/win32 | |
parent | 0f5e73eebbb509750a380ccddfaf112ba415dd4a (diff) | |
download | chef-utf8_reg.tar.gz |
fixes #4897 encode registry enumerated values and keys to utf8 instead of the local codepageutf8_reg
Diffstat (limited to 'lib/chef/monkey_patches/win32')
-rw-r--r-- | lib/chef/monkey_patches/win32/registry.rb | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/chef/monkey_patches/win32/registry.rb b/lib/chef/monkey_patches/win32/registry.rb index 1c1a103432..719a4d46a1 100644 --- a/lib/chef/monkey_patches/win32/registry.rb +++ b/lib/chef/monkey_patches/win32/registry.rb @@ -22,6 +22,17 @@ require "win32/registry" module Win32 class Registry + # ::Win32::Registry#export_string is used when enumerating child + # keys and values and re encodes a UTF-16LE to the local codepage. + # This can result in encoding incompatibilities if the native codepage + # does not support the characters in the registry. There is an open bug + # in ruby at https://bugs.ruby-lang.org/issues/11410. Rather than converting + # the UTF-16LE originally returned by the win32 api, we encode to UTF-8 + # which will likely not result in any conversion error. + def export_string(str, enc = Encoding.default_internal || 'utf-8') + str.encode(enc) + end + module API extend Chef::ReservedNames::Win32::API::Registry |