to_windows.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //go:build windows
  2. package yu_strings
  3. import (
  4. yu_math "gogs.qqck.cn/s/tools/math"
  5. yu_sys "gogs.qqck.cn/s/tools/sys"
  6. )
  7. // func Utf8ToUnicode(utf8 string) string {
  8. // j_utf8_len := uintptr(len(utf8))
  9. // j_unicode_len := j_utf8_len * 2
  10. // j_unicode := make([]byte, j_unicode_len)
  11. // return string(j_unicode[:yu_sys.MultiByteToWideChar.CallInt(65001, 0, utf8, j_utf8_len, j_unicode, j_unicode_len)*2])
  12. // }
  13. // func Utf8ToUnicodePtr(utf8 string) uintptr {
  14. // j_utf8_len := uintptr(len(utf8))
  15. // j_unicode_len := j_utf8_len * 2
  16. // j_unicode := make([]byte, j_unicode_len+2) // 结尾 {0,0}
  17. // yu_sys.MultiByteToWideChar.CallInt(65001, 0, utf8, j_utf8_len, j_unicode, j_unicode_len)
  18. // return uintptr(unsafe.Pointer(&j_unicode[0]))
  19. // }
  20. // func UnicodeToUtf8(unicode string) string {
  21. // j_unicode_len := uintptr(len(unicode))
  22. // j_utf8_size := j_unicode_len * 3
  23. // j_utf8 := make([]byte, j_utf8_size)
  24. // return string(j_utf8[:yu_sys.WideCharToMultiByte.CallInt(65001, 0, unicode, j_unicode_len/2, j_utf8, j_utf8_size, 0, 0)])
  25. // }
  26. //
  27. // func GbkToUnicode(gbk string) string {
  28. // j_gbk_len := uintptr(len(gbk))
  29. // j_unicode_len := j_gbk_len * 2
  30. // j_unicode := make([]byte, j_unicode_len)
  31. // return string(j_unicode[:yu_sys.MultiByteToWideChar.CallInt(936, 0, gbk, j_gbk_len, j_unicode, j_unicode_len)*2])
  32. // }
  33. // func UnicodeToGbk(unicode string) string {
  34. // j_unicode_len := uintptr(len(unicode))
  35. // j_gbk_size := j_unicode_len * 3
  36. // j_gbk := make([]byte, j_gbk_size)
  37. // return string(j_gbk[:yu_sys.WideCharToMultiByte.CallInt(936, 0, unicode, j_unicode_len/2, j_gbk, j_gbk_size, 0, 0)])
  38. // }
  39. // func Utf8ToGbk(utf8 string) string {
  40. // return UnicodeToGbk(Utf8ToUnicode(utf8))
  41. // }
  42. func Utf8ToGbkBytes(utf8 string) []byte {
  43. j_utf8_len := uintptr(len(utf8))
  44. j_unicode_len := j_utf8_len * 2
  45. j_unicode := make([]byte, j_unicode_len+2) // 结尾 {0,0}
  46. yu_sys.MultiByteToWideChar.Call(65001, 0, utf8, j_utf8_len, j_unicode, j_unicode_len)
  47. j_gbk := make([]byte, j_unicode_len+2) // 结尾 {0,0}
  48. yu_sys.WideCharToMultiByte.Call(936, 0, j_unicode, uint(yu_math.MaxUint), j_gbk, j_unicode_len, 0, 0)
  49. return j_gbk
  50. }
  51. // func GbkToUtf8(utf8 string) string {
  52. // return UnicodeToUtf8(GbkToUnicode(utf8))
  53. // }
  54. func GbkPtrToUtf8(ptr uintptr) string {
  55. j_unicode_len := yu_sys.MultiByteToWideChar.CallUintptr(936, 0, ptr, uint(yu_math.MaxUint), 0, 0)
  56. if j_unicode_len < 2 {
  57. return ""
  58. } // 结尾 {0,0} 也占一个字符
  59. return GbkPtrLenToUtf8(ptr, (j_unicode_len-1)*2)
  60. }
  61. func GbkPtrLenToUtf8(ptr uintptr, len uintptr) string {
  62. if len < 1 {
  63. return ""
  64. }
  65. j_unicode_len := len * 2
  66. j_unicode := make([]byte, j_unicode_len+2) // 结尾 {0,0}
  67. yu_sys.MultiByteToWideChar.Call(936, 0, ptr, len, j_unicode, j_unicode_len)
  68. j_utf8 := make([]byte, len*3+2) // 结尾 {0,0}
  69. return string(j_utf8[:yu_sys.WideCharToMultiByte.CallInt(65001, 0, j_unicode, uint(yu_math.MaxUint), j_utf8, len*3, 0, 0)-1]) // 结尾 {0}
  70. }