123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- //go:build windows
- package yu_strings
- import (
- yu_math "gogs.qqck.cn/s/tools/math"
- yu_sys "gogs.qqck.cn/s/tools/sys"
- )
- // func Utf8ToUnicode(utf8 string) string {
- // j_utf8_len := uintptr(len(utf8))
- // j_unicode_len := j_utf8_len * 2
- // j_unicode := make([]byte, j_unicode_len)
- // return string(j_unicode[:yu_sys.MultiByteToWideChar.CallInt(65001, 0, utf8, j_utf8_len, j_unicode, j_unicode_len)*2])
- // }
- // func Utf8ToUnicodePtr(utf8 string) uintptr {
- // j_utf8_len := uintptr(len(utf8))
- // j_unicode_len := j_utf8_len * 2
- // j_unicode := make([]byte, j_unicode_len+2) // 结尾 {0,0}
- // yu_sys.MultiByteToWideChar.CallInt(65001, 0, utf8, j_utf8_len, j_unicode, j_unicode_len)
- // return uintptr(unsafe.Pointer(&j_unicode[0]))
- // }
- // func UnicodeToUtf8(unicode string) string {
- // j_unicode_len := uintptr(len(unicode))
- // j_utf8_size := j_unicode_len * 3
- // j_utf8 := make([]byte, j_utf8_size)
- // return string(j_utf8[:yu_sys.WideCharToMultiByte.CallInt(65001, 0, unicode, j_unicode_len/2, j_utf8, j_utf8_size, 0, 0)])
- // }
- //
- // func GbkToUnicode(gbk string) string {
- // j_gbk_len := uintptr(len(gbk))
- // j_unicode_len := j_gbk_len * 2
- // j_unicode := make([]byte, j_unicode_len)
- // return string(j_unicode[:yu_sys.MultiByteToWideChar.CallInt(936, 0, gbk, j_gbk_len, j_unicode, j_unicode_len)*2])
- // }
- // func UnicodeToGbk(unicode string) string {
- // j_unicode_len := uintptr(len(unicode))
- // j_gbk_size := j_unicode_len * 3
- // j_gbk := make([]byte, j_gbk_size)
- // return string(j_gbk[:yu_sys.WideCharToMultiByte.CallInt(936, 0, unicode, j_unicode_len/2, j_gbk, j_gbk_size, 0, 0)])
- // }
- // func Utf8ToGbk(utf8 string) string {
- // return UnicodeToGbk(Utf8ToUnicode(utf8))
- // }
- func Utf8ToGbkBytes(utf8 string) []byte {
- j_utf8_len := uintptr(len(utf8))
- j_unicode_len := j_utf8_len * 2
- j_unicode := make([]byte, j_unicode_len+2) // 结尾 {0,0}
- yu_sys.MultiByteToWideChar.Call(65001, 0, utf8, j_utf8_len, j_unicode, j_unicode_len)
- j_gbk := make([]byte, j_unicode_len+2) // 结尾 {0,0}
- yu_sys.WideCharToMultiByte.Call(936, 0, j_unicode, uint(yu_math.MaxUint), j_gbk, j_unicode_len, 0, 0)
- return j_gbk
- }
- // func GbkToUtf8(utf8 string) string {
- // return UnicodeToUtf8(GbkToUnicode(utf8))
- // }
- func GbkPtrToUtf8(ptr uintptr) string {
- j_unicode_len := yu_sys.MultiByteToWideChar.CallUintptr(936, 0, ptr, uint(yu_math.MaxUint), 0, 0)
- if j_unicode_len < 2 {
- return ""
- } // 结尾 {0,0} 也占一个字符
- return GbkPtrLenToUtf8(ptr, (j_unicode_len-1)*2)
- }
- func GbkPtrLenToUtf8(ptr uintptr, len uintptr) string {
- if len < 1 {
- return ""
- }
- j_unicode_len := len * 2
- j_unicode := make([]byte, j_unicode_len+2) // 结尾 {0,0}
- yu_sys.MultiByteToWideChar.Call(936, 0, ptr, len, j_unicode, j_unicode_len)
- j_utf8 := make([]byte, len*3+2) // 结尾 {0,0}
- return string(j_utf8[:yu_sys.WideCharToMultiByte.CallInt(65001, 0, j_unicode, uint(yu_math.MaxUint), j_utf8, len*3, 0, 0)-1]) // 结尾 {0}
- }
|