Module: Windows::Unicode
Constant Summary collapse
- CP_ACP =
0
- CP_OEMCP =
1
- CP_MACCP =
2
- CP_THREAD_ACP =
3
- CP_SYMBOL =
42
- CP_UTF7 =
65000
- CP_UTF8 =
65001
- MB_PRECOMPOSED =
0x00000001
- MB_COMPOSITE =
0x00000002
- MB_USEGLYPHCHARS =
0x00000004
- MB_ERR_INVALID_CHARS =
0x00000008
- WC_COMPOSITECHECK =
0x00000200
- WC_DISCARDNS =
0x00000010
- WC_SEPCHARS =
0x00000020
- WC_DEFAULTCHAR =
0x00000040
- WC_NO_BEST_FIT_CHARS =
0x00000400
- ANSI_CHARSET =
0
- DEFAULT_CHARSET =
1
- SYMBOL_CHARSET =
2
- SHIFTJIS_CHARSET =
128
- HANGEUL_CHARSET =
129
- HANGUL_CHARSET =
129
- GB2312_CHARSET =
134
- CHINESEBIG5_CHARSET =
136
- OEM_CHARSET =
255
- JOHAB_CHARSET =
130
- HEBREW_CHARSET =
177
- ARABIC_CHARSET =
178
- GREEK_CHARSET =
161
- TURKISH_CHARSET =
162
- VIETNAMESE_CHARSET =
163
- THAI_CHARSET =
222
- EASTEUROPE_CHARSET =
238
- RUSSIAN_CHARSET =
204
- IS_TEXT_UNICODE_ASCII16 =
0x0001
- IS_TEXT_UNICODE_REVERSE_ASCII16 =
0x0010
- IS_TEXT_UNICODE_STATISTICS =
0x0002
- IS_TEXT_UNICODE_REVERSE_STATISTICS =
0x0020
- IS_TEXT_UNICODE_CONTROLS =
0x0004
- IS_TEXT_UNICODE_REVERSE_CONTROLS =
0x0040
- IS_TEXT_UNICODE_SIGNATURE =
0x0008
- IS_TEXT_UNICODE_REVERSE_SIGNATURE =
0x0080
- IS_TEXT_UNICODE_ILLEGAL_CHARS =
0x0100
- IS_TEXT_UNICODE_ODD_LENGTH =
0x0200
- IS_TEXT_UNICODE_DBCS_LEADBYTE =
0x0400
- IS_TEXT_UNICODE_NULL_BYTES =
0x1000
- IS_TEXT_UNICODE_UNICODE_MASK =
0x000F
- IS_TEXT_UNICODE_REVERSE_MASK =
0x00F0
- IS_TEXT_UNICODE_NOT_UNICODE_MASK =
0x0F00
- IS_TEXT_UNICODE_NOT_ASCII_MASK =
0xF000
- TCI_SRCCHARSET =
1
- TCI_SRCCODEPAGE =
2
- TCI_SRCFONTSIG =
3
- TCI_SRCLOCALE =
0x100
Constants included from Error
Error::ALLOWED_ABORT, Error::ALLOWED_FAIL, Error::ALLOWED_IGNORE, Error::ALLOWED_RETRY, Error::APPLICATION_ERROR_MASK, Error::CLASS_E_NOAGGREGATION, Error::CO_E_NOT_SUPPORTED, Error::DISP_E_BADINDEX, Error::DISP_E_EXCEPTION, Error::DISP_E_MEMBERNOTFOUND, Error::DISP_E_PARAMNOTFOUND, Error::ERRACT_ABORT, Error::ERRACT_DLYRET, Error::ERRACT_IGNORE, Error::ERRACT_INTRET, Error::ERRACT_PANIC, Error::ERRACT_RETRY, Error::ERRACT_USER, Error::ERRCLASS_ALREADY, Error::ERRCLASS_APPERR, Error::ERRCLASS_AUTH, Error::ERRCLASS_BADFMT, Error::ERRCLASS_CANT, Error::ERRCLASS_HRDFAIL, Error::ERRCLASS_INTRN, Error::ERRCLASS_LOCKED, Error::ERRCLASS_MEDIA, Error::ERRCLASS_NOTFND, Error::ERRCLASS_OUTRES, Error::ERRCLASS_SYSFAIL, Error::ERRCLASS_TEMPSIT, Error::ERRCLASS_TIME, Error::ERRCLASS_UNK, Error::ERRLOC_DISK, Error::ERRLOC_MEM, Error::ERRLOC_NET, Error::ERRLOC_SERDEV, Error::ERRLOC_UNK, Error::ERROR_ACCESS_DENIED, Error::ERROR_ALREADY_ASSIGNED, Error::ERROR_ALREADY_EXISTS, Error::ERROR_ARENA_TRASHED, Error::ERROR_AUTODATASEG_EXCEEDS_64k, Error::ERROR_BAD_ARGUMENTS, Error::ERROR_BAD_COMMAND, Error::ERROR_BAD_DRIVER_LEVEL, Error::ERROR_BAD_DYNALINK, Error::ERROR_BAD_ENVIRONMENT, Error::ERROR_BAD_EXE_FORMAT, Error::ERROR_BAD_FORMAT, Error::ERROR_BAD_LENGTH, Error::ERROR_BAD_PATHNAME, Error::ERROR_BAD_PIPE, Error::ERROR_BAD_THREADID_ADDR, Error::ERROR_BAD_UNIT, Error::ERROR_BROKEN_PIPE, Error::ERROR_BUSY_DRIVE, Error::ERROR_CALL_NOT_IMPLEMENTED, Error::ERROR_CANNOT_MAKE, Error::ERROR_CHILD_ALIVE_NOWAIT, Error::ERROR_CHILD_NOT_COMPLETE, Error::ERROR_CRC, Error::ERROR_CURRENT_DIRECTORY, Error::ERROR_DIRECT_ACCESS_HANDLE, Error::ERROR_DIR_NOT_EMPTY, Error::ERROR_DIR_NOT_ROOT, Error::ERROR_DISCARDED, Error::ERROR_DISK_CHANGE, Error::ERROR_DISK_FULL, Error::ERROR_DRIVE_LOCKED, Error::ERROR_DUP_FCB, Error::ERROR_DYNLINK_FROM_INVALID_RING, Error::ERROR_ENVVAR_NOT_FOUND, Error::ERROR_EXCL_SEM_ALREADY_OWNED, Error::ERROR_EXE_MARKED_INVALID, Error::ERROR_FAIL_I24, Error::ERROR_FCB_UNAVAILABLE, Error::ERROR_FILENAME_EXCED_RANGE, Error::ERROR_FILE_EXISTS, Error::ERROR_FILE_NOT_FOUND, Error::ERROR_GEN_FAILURE, Error::ERROR_HANDLE_DISK_FULL, Error::ERROR_HANDLE_EOF, Error::ERROR_I24_BAD_COMMAND, Error::ERROR_I24_BAD_LENGTH, Error::ERROR_I24_BAD_UNIT, Error::ERROR_I24_CHAR_CALL_INTERRUPTED, Error::ERROR_I24_CRC, Error::ERROR_I24_DISK_CHANGE, Error::ERROR_I24_GEN_FAILURE, Error::ERROR_I24_INVALID_PARAMETER, Error::ERROR_I24_NOT_DOS_DISK, Error::ERROR_I24_NOT_READY, Error::ERROR_I24_NO_MONITOR_SUPPORT, Error::ERROR_I24_OUT_OF_PAPER, Error::ERROR_I24_READ_FAULT, Error::ERROR_I24_SECTOR_NOT_FOUND, Error::ERROR_I24_SEEK, Error::ERROR_I24_UNCERTAIN_MEDIA, Error::ERROR_I24_WRITE_FAULT, Error::ERROR_I24_WRITE_PROTECT, Error::ERROR_I24_WRONG_DISK, Error::ERROR_INFLOOP_IN_RELOC_CHAIN, Error::ERROR_INFO_NOT_AVAIL, Error::ERROR_INSUFFICIENT_BUFFER, Error::ERROR_INTERRUPT, Error::ERROR_INVALID_ACCESS, Error::ERROR_INVALID_AT_INTERRUPT_TIME, Error::ERROR_INVALID_BLOCK, Error::ERROR_INVALID_CALLGATE, Error::ERROR_INVALID_CATEGORY, Error::ERROR_INVALID_DATA, Error::ERROR_INVALID_DRIVE, Error::ERROR_INVALID_EVENT_COUNT, Error::ERROR_INVALID_EXE_SIGNATURE, Error::ERROR_INVALID_FLAGS, Error::ERROR_INVALID_FLAG_NUMBER, Error::ERROR_INVALID_FUNCTION, Error::ERROR_INVALID_HANDLE, Error::ERROR_INVALID_LEVEL, Error::ERROR_INVALID_LIST_FORMAT, Error::ERROR_INVALID_MINALLOCSIZE, Error::ERROR_INVALID_MODULETYPE, Error::ERROR_INVALID_NAME, Error::ERROR_INVALID_ORDINAL, Error::ERROR_INVALID_PARAMETER, Error::ERROR_INVALID_PASSWORD, Error::ERROR_INVALID_SEGDPL, Error::ERROR_INVALID_SEGMENT_NUMBER, Error::ERROR_INVALID_SIGNAL_NUMBER, Error::ERROR_INVALID_STACKSEG, Error::ERROR_INVALID_STARTING_CODESEG, Error::ERROR_INVALID_TARGET_HANDLE, Error::ERROR_INVALID_VERIFY_SWITCH, Error::ERROR_IOPL_NOT_ENABLED, Error::ERROR_IO_INCOMPLETE, Error::ERROR_IO_PENDING, Error::ERROR_IS_JOINED, Error::ERROR_IS_JOIN_PATH, Error::ERROR_IS_JOIN_TARGET, Error::ERROR_IS_SUBSTED, Error::ERROR_IS_SUBST_PATH, Error::ERROR_IS_SUBST_TARGET, Error::ERROR_ITERATED_DATA_EXCEEDS_64k, Error::ERROR_JOIN_TO_JOIN, Error::ERROR_JOIN_TO_SUBST, Error::ERROR_LABEL_TOO_LONG, Error::ERROR_LOCKED, Error::ERROR_LOCK_VIOLATION, Error::ERROR_MAX_THRDS_REACHED, Error::ERROR_META_EXPANSION_TOO_LONG, Error::ERROR_MOD_NOT_FOUND, Error::ERROR_MONITORS_NOT_SUPPORTED, Error::ERROR_MORE_DATA, Error::ERROR_NEGATIVE_SEEK, Error::ERROR_NESTING_NOT_ALLOWED, Error::ERROR_NET_WRITE_FAULT, Error::ERROR_NOT_CURRENT_CTRY, Error::ERROR_NOT_DOS_DISK, Error::ERROR_NOT_ENOUGH_MEMORY, Error::ERROR_NOT_FROZEN, Error::ERROR_NOT_JOINED, Error::ERROR_NOT_LOCKED, Error::ERROR_NOT_READY, Error::ERROR_NOT_SAME_DEVICE, Error::ERROR_NOT_SUBSTED, Error::ERROR_NOT_SUPPORTED, Error::ERROR_NO_CHILD_PROCESS, Error::ERROR_NO_DATA, Error::ERROR_NO_ITEMS, Error::ERROR_NO_MORE_FILES, Error::ERROR_NO_MORE_SEARCH_HANDLES, Error::ERROR_NO_PROC_SLOTS, Error::ERROR_NO_SIGNAL_SENT, Error::ERROR_NO_UNICODE_TRANSLATION, Error::ERROR_NO_VOLUME_LABEL, Error::ERROR_OPEN_FAILED, Error::ERROR_OPERATION_ABORTED, Error::ERROR_OUT_OF_PAPER, Error::ERROR_OUT_OF_STRUCTURES, Error::ERROR_PATH_BUSY, Error::ERROR_PATH_NOT_FOUND, Error::ERROR_PIPE_BUSY, Error::ERROR_PIPE_CONNECTED, Error::ERROR_PIPE_LISTENING, Error::ERROR_PIPE_NOT_CONNECTED, Error::ERROR_PROC_NOT_FOUND, Error::ERROR_PROTECTION_VIOLATION, Error::ERROR_READ_FAULT, Error::ERROR_RELOC_CHAIN_XEEDS_SEGLIM, Error::ERROR_RING2SEG_MUST_BE_MOVABLE, Error::ERROR_RING2_STACK_IN_USE, Error::ERROR_SAME_DRIVE, Error::ERROR_SECTOR_NOT_FOUND, Error::ERROR_SEEK, Error::ERROR_SEEK_ON_DEVICE, Error::ERROR_SEM_IS_SET, Error::ERROR_SEM_NOT_FOUND, Error::ERROR_SEM_OWNER_DIED, Error::ERROR_SEM_TIMEOUT, Error::ERROR_SEM_USER_LIMIT, Error::ERROR_SEVERITY_ERROR, Error::ERROR_SEVERITY_INFORMATIONAL, Error::ERROR_SEVERITY_SUCCESS, Error::ERROR_SEVERITY_WARNING, Error::ERROR_SHARING_BUFFER_EXCEEDED, Error::ERROR_SHARING_VIOLATION, Error::ERROR_SIGNAL_PENDING, Error::ERROR_SIGNAL_REFUSED, Error::ERROR_SUBST_TO_JOIN, Error::ERROR_SUBST_TO_SUBST, Error::ERROR_SUCCESS, Error::ERROR_SYSTEM_TRACE, Error::ERROR_THREAD_1_INACTIVE, Error::ERROR_TOO_MANY_MODULES, Error::ERROR_TOO_MANY_MUXWAITERS, Error::ERROR_TOO_MANY_OPEN_FILES, Error::ERROR_TOO_MANY_SEMAPHORES, Error::ERROR_TOO_MANY_SEM_REQUESTS, Error::ERROR_TOO_MANY_TCBS, Error::ERROR_UNCERTAIN_MEDIA, Error::ERROR_USER_DEFINED_BASE, Error::ERROR_VIOKBD_REQUEST, Error::ERROR_WAIT_NO_CHILDREN, Error::ERROR_WRITE_FAULT, Error::ERROR_WRITE_PROTECT, Error::ERROR_WRONG_DISK, Error::ERR_TSTDUP, Error::ERR_TSTOVFL, Error::E_INVALIDARG, Error::E_NOINTERFACE, Error::E_NOTIMPL, Error::E_OUTOFMEMORY, Error::E_UNEXPECTED, Error::FORMAT_MESSAGE_ALLOCATE_BUFFER, Error::FORMAT_MESSAGE_ARGUMENT_ARRAY, Error::FORMAT_MESSAGE_FROM_HMODULE, Error::FORMAT_MESSAGE_FROM_STRING, Error::FORMAT_MESSAGE_FROM_SYSTEM, Error::FORMAT_MESSAGE_IGNORE_INSERTS, Error::FORMAT_MESSAGE_MAX_WIDTH_MASK, Error::I24_AREA, Error::I24_CLASS, Error::I24_OPERATION, Error::NO_ERROR, Error::REGDB_E_CLASSNOTREG, Error::RPC_E_TIMEOUT, Error::SCHED_E_ACCOUNT_DBASE_CORRUPT, Error::SCHED_E_ACCOUNT_INFORMATION_NOT_SET, Error::SCHED_E_ACCOUNT_NAME_NOT_FOUND, Error::SCHED_E_CANNOT_OPEN_TASK, Error::SCHED_E_INVALID_TASK, Error::SCHED_E_NO_SECURITY_SERVICES, Error::SCHED_E_SERVICE_NOT_INSTALLED, Error::SCHED_E_TASK_NOT_READY, Error::SCHED_E_TASK_NOT_RUNNING, Error::SCHED_E_TRIGGER_NOT_FOUND, Error::SCHED_E_UNKNOWN_OBJECT_VERSION, Error::SCHED_S_EVENT_TRIGGER, Error::SCHED_S_TASK_DISABLED, Error::SCHED_S_TASK_HAS_NOT_RUN, Error::SCHED_S_TASK_HAS_NO_MORE_RUNS, Error::SCHED_S_TASK_NOT_SCHEDULED, Error::SCHED_S_TASK_NO_VALID_TRIGGERS, Error::SCHED_S_TASK_READY, Error::SCHED_S_TASK_RUNNING, Error::SCHED_S_TASK_TERMINATED, Error::SEM_FAILCRITICALERRORS, Error::SEM_NOALIGNMENTFAULTEXCEPT, Error::SEM_NOGPFAULTERRORBOX, Error::SEM_NOOPENFILEERRORBOX, Error::S_OK, Error::TC_GP_TRAP, Error::TC_HARDERR, Error::TC_NORMAL, Error::TC_SIGNAL, Error::WSAEACCESS, Error::WSAEADDRINUSE, Error::WSAEADDRNOTAVAIL, Error::WSAEAFNOSUPPORT, Error::WSAEALREADY, Error::WSAEBADF, Error::WSAECANCELLED, Error::WSAECONNABORTED, Error::WSAECONNREFUSED, Error::WSAECONNRESET, Error::WSAEDESTADDRREQ, Error::WSAEDISCON, Error::WSAEDQUOT, Error::WSAEFAULT, Error::WSAEHOSTDOWN, Error::WSAEHOSTUNREACH, Error::WSAEINPROGRESS, Error::WSAEINTR, Error::WSAEINVAL, Error::WSAEINVALIDPROCTABLE, Error::WSAEINVALIDPROVIDER, Error::WSAEISCONN, Error::WSAELOOP, Error::WSAEMFILE, Error::WSAEMSGSIZE, Error::WSAENAMETOOLONG, Error::WSAENETDOWN, Error::WSAENETRESET, Error::WSAENETUNREACH, Error::WSAENOBUFS, Error::WSAENOEMPTY, Error::WSAENOMORE, Error::WSAENOPROTOOPT, Error::WSAENOTCONN, Error::WSAENOTSOCK, Error::WSAEOPNOTSUPP, Error::WSAEPFNOSUPPORT, Error::WSAEPROCLIM, Error::WSAEPROTONOSUPPORT, Error::WSAEPROTOTYPE, Error::WSAEPROVIDERFAILEDINIT, Error::WSAEREFUSED, Error::WSAEREMOTE, Error::WSAESHUTDOWN, Error::WSAESOCKTNOSUPPORT, Error::WSAESTALE, Error::WSAETOOMANYREFS, Error::WSAEUSERS, Error::WSAEWOULDBLOCK, Error::WSAHOST_NOT_FOUND, Error::WSANOTINITIALISED, Error::WSANO_DATA, Error::WSANO_RECOVERY, Error::WSASERVICE_NOT_FOUND, Error::WSASYSCALLFAILURE, Error::WSASYSNOTREADY, Error::WSATIMEDOUT, Error::WSATRY_AGAIN, Error::WSATYPE_NOT_FOUND, Error::WSAVERNOTSUPPORTED, Error::WSA_E_CANCELLED, Error::WSA_E_NO_MORE, Error::WSA_INVALID_HANDLE, Error::WSA_INVALID_PARAMETER, Error::WSA_IO_INCOMPLETE, Error::WSA_IO_PENDING, Error::WSA_NOT_ENOUGH_MEMORY, Error::WSA_OPERATION_ABORTED, Error::WSA_QOS_RECEIVERS, Error::WSA_QOS_SENDERS
Constants included from MSVCRT::String
MSVCRT::String::Mbscmp, MSVCRT::String::Mbscpy, MSVCRT::String::Mbslen, MSVCRT::String::Mbsrev, MSVCRT::String::Strchr, MSVCRT::String::Strcmp, MSVCRT::String::Strcpy, MSVCRT::String::Strcspn, MSVCRT::String::Strlen, MSVCRT::String::Strncpy, MSVCRT::String::Strpbrk, MSVCRT::String::Strrchr, MSVCRT::String::Strrev, MSVCRT::String::Strspn, MSVCRT::String::Strstr, MSVCRT::String::Strtok, MSVCRT::String::Wcscmp, MSVCRT::String::Wcscpy, MSVCRT::String::Wcslen, MSVCRT::String::Wcsncpy, MSVCRT::String::Wcsrev
Instance Method Summary collapse
-
#multi_to_wide(string, encoding = nil) ⇒ Object
Maps a wide character string to a new character string using the specified
encoding
. -
#wide_to_multi(wstring, encoding = nil) ⇒ Object
Maps a wide character string to a new character string using the specified
encoding
.
Methods included from Error
#FAILED, #HRESULT_CODE, #HRESULT_FACILITY, #HRESULT_FROM_NT, #HRESULT_FROM_WIN32, #HRESULT_SEVERITY, #IS_ERROR, #MAKE_HRESULT, #MAKE_SCODE, #SUCCEEDED, #get_last_error
Methods included from MSVCRT::String
#mbscmp, #mbscpy, #mbslen, #mbsrev, #strchr, #strcmp, #strcpy, #strcspn, #strlen, #strncpy, #strpbrk, #strrchr, #strrev, #strspn, #strstr, #strtok, #strtok_s, #wcscmp, #wcscpy, #wcslen, #wcsncpy, #wcsrev
Instance Method Details
#multi_to_wide(string, encoding = nil) ⇒ Object
Maps a wide character string to a new character string using the specified encoding
. If no encoding is specified, then CP_UTF8 is used if $KCODE (or the encoding name in Ruby 1.9.x) is set to UTF8. Otherwise, CP_ACP is used.
If the function fails it simply returns the string as-is.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/windows/unicode.rb', line 94 def multi_to_wide(string, encoding=nil) return nil unless string raise TypeError unless string.is_a?(String) return string if IsTextUnicode(string, string.size, nil) unless encoding if RUBY_VERSION.to_f >= 1.9 encoding = (string.encoding.name == 'UTF-8') ? CP_UTF8 : CP_ACP else encoding = ($KCODE == 'UTF8') ? CP_UTF8 : CP_ACP end end int = MultiByteToWideChar(encoding, 0, string, -1, nil, 0) # Trailing nulls are retained if int > 0 buf = ' ' * int * 2 MultiByteToWideChar(encoding, 0, string, -1, buf, int) buf else raise ArgumentError, get_last_error end end |
#wide_to_multi(wstring, encoding = nil) ⇒ Object
Maps a wide character string to a new character string using the specified encoding
. If no encoding is specified, then CP_UTF8 is used if $KCODE (or the encoding name in Ruby 1.9.x) is set to UTF8. Otherwise, CP_ACP is used.
If the function fails it simply returns the string as-is.
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/windows/unicode.rb', line 126 def wide_to_multi(wstring, encoding=nil) return nil unless wstring raise TypeError unless wstring.is_a?(String) unless encoding if RUBY_VERSION.to_f >= 1.9 encoding = (wstring.encoding.name == 'UTF-8') ? CP_UTF8 : CP_ACP else encoding = ($KCODE == 'UTF8') ? CP_UTF8 : CP_ACP end end # Add a trailing double null if necessary wstring << "\000\000" if wstring[-1].chr != "\000" int = WideCharToMultiByte(encoding, 0, wstring, -1, 0, 0, nil, nil) # Trailing nulls are stripped if int > 0 buf = ' ' * int WideCharToMultiByte(encoding, 0, wstring, -1, buf, strlen(buf), nil, nil) buf[ /^[^\0]*/ ] else raise ArgumentError, get_last_error end end |