# module Chef::ReservedNames::Win32::API::Unicode

### Constants

ANSI_CHARSET
ARABIC_CHARSET
CHINESEBIG5_CHARSET
CP_ACP

  Win32 API Constants

CP_MACCP
CP_OEMCP
CP_SYMBOL
CP_THREAD_ACP
CP_UTF7
CP_UTF8
DEFAULT_CHARSET
EASTEUROPE_CHARSET
GB2312_CHARSET
GREEK_CHARSET
HANGEUL_CHARSET
HANGUL_CHARSET
HEBREW_CHARSET
IS_TEXT_UNICODE_ASCII16
IS_TEXT_UNICODE_CONTROLS
IS_TEXT_UNICODE_DBCS_LEADBYTE
IS_TEXT_UNICODE_ILLEGAL_CHARS
IS_TEXT_UNICODE_NOT_ASCII_MASK
IS_TEXT_UNICODE_NOT_UNICODE_MASK
IS_TEXT_UNICODE_NULL_BYTES
IS_TEXT_UNICODE_ODD_LENGTH
IS_TEXT_UNICODE_REVERSE_ASCII16
IS_TEXT_UNICODE_REVERSE_CONTROLS
IS_TEXT_UNICODE_REVERSE_MASK
IS_TEXT_UNICODE_REVERSE_SIGNATURE
IS_TEXT_UNICODE_REVERSE_STATISTICS
IS_TEXT_UNICODE_SIGNATURE
IS_TEXT_UNICODE_STATISTICS
IS_TEXT_UNICODE_UNICODE_MASK
JOHAB_CHARSET
MB_COMPOSITE
MB_ERR_INVALID_CHARS
MB_PRECOMPOSED
MB_USEGLYPHCHARS
OEM_CHARSET
RUSSIAN_CHARSET
SHIFTJIS_CHARSET
SYMBOL_CHARSET
TCI_SRCCHARSET
TCI_SRCCODEPAGE
TCI_SRCFONTSIG
TCI_SRCLOCALE
THAI_CHARSET
TURKISH_CHARSET
VIETNAMESE_CHARSET
WC_COMPOSITECHECK
WC_DEFAULTCHAR
WC_DISCARDNS
WC_NO_BEST_FIT_CHARS
WC_SEPCHARS

### Public Instance Methods

utf8_to_wide(ustring) click to toggle source

Helpers

    # File lib/chef/win32/api/unicode.rb, line 136
    def utf8_to_wide(ustring)
      # ensure it is actually UTF-8
      # Ruby likes to mark binary data as ASCII-8BIT
      ustring = (ustring + "").force_encoding('UTF-8') if ustring.respond_to?(:force_encoding) && ustring.encoding.name != "UTF-8"

      # ensure we have the double-null termination Windows Wide likes
      ustring = ustring + "\000\000" if ustring[-1].chr != "\000"

      # encode it all as UTF-16LE AKA Windows Wide Character AKA Windows Unicode
      ustring = begin
        if ustring.respond_to?(:encode)
          ustring.encode('UTF-16LE')
        else
          require 'iconv'
          Iconv.conv("UTF-16LE", "UTF-8", ustring)
        end
      end
      ustring
    end

wide_to_utf8(wstring) click to toggle source

    # File lib/chef/win32/api/unicode.rb, line 156
    def wide_to_utf8(wstring)
      # ensure it is actually UTF-16LE
      # Ruby likes to mark binary data as ASCII-8BIT
      wstring = wstring.force_encoding('UTF-16LE') if wstring.respond_to?(:force_encoding)

      # encode it all as UTF-8
      wstring = begin
        if wstring.respond_to?(:encode)
          wstring.encode('UTF-8')
        else
          require 'iconv'
          Iconv.conv("UTF-8", "UTF-16LE", wstring)
        end
      end
      # remove trailing CRLF and NULL characters
      wstring.strip!
      wstring
    end