encode.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. //UTF-16转UTF-8
  2. function utf16ToUtf8(s) {
  3. if (!s) {
  4. return
  5. }
  6. var i,
  7. code,
  8. ret = [],
  9. len = s.length
  10. for (i = 0; i < len; i++) {
  11. code = s.charCodeAt(i)
  12. if (code > 0x0 && code <= 0x7f) {
  13. //单字节
  14. //UTF-16 0000 - 007F
  15. //UTF-8 0xxxxxxx
  16. ret.push(s.charAt(i))
  17. } else if (code >= 0x80 && code <= 0x7ff) {
  18. //双字节
  19. //UTF-16 0080 - 07FF
  20. //UTF-8 110xxxxx 10xxxxxx
  21. ret.push(
  22. //110xxxxx
  23. String.fromCharCode(0xc0 | ((code >> 6) & 0x1f)),
  24. //10xxxxxx
  25. String.fromCharCode(0x80 | (code & 0x3f))
  26. )
  27. } else if (code >= 0x800 && code <= 0xffff) {
  28. //三字节
  29. //UTF-16 0800 - FFFF
  30. //UTF-8 1110xxxx 10xxxxxx 10xxxxxx
  31. ret.push(
  32. //1110xxxx
  33. String.fromCharCode(0xe0 | ((code >> 12) & 0xf)),
  34. //10xxxxxx
  35. String.fromCharCode(0x80 | ((code >> 6) & 0x3f)),
  36. //10xxxxxx
  37. String.fromCharCode(0x80 | (code & 0x3f))
  38. )
  39. }
  40. }
  41. return ret.join('')
  42. }
  43. //UTF-8转UTF-16
  44. function utf8ToUtf16(s) {
  45. if (!s) {
  46. return
  47. }
  48. var i,
  49. codes,
  50. bytes,
  51. ret = [],
  52. len = s.length
  53. for (i = 0; i < len; i++) {
  54. codes = []
  55. codes.push(s.charCodeAt(i))
  56. if (((codes[0] >> 7) & 0xff) == 0x0) {
  57. //单字节 0xxxxxxx
  58. ret.push(s.charAt(i))
  59. } else if (((codes[0] >> 5) & 0xff) == 0x6) {
  60. //双字节 110xxxxx 10xxxxxx
  61. codes.push(s.charCodeAt(++i))
  62. bytes = []
  63. bytes.push(codes[0] & 0x1f)
  64. bytes.push(codes[1] & 0x3f)
  65. ret.push(String.fromCharCode((bytes[0] << 6) | bytes[1]))
  66. } else if (((codes[0] >> 4) & 0xff) == 0xe) {
  67. //三字节 1110xxxx 10xxxxxx 10xxxxxx
  68. codes.push(s.charCodeAt(++i))
  69. codes.push(s.charCodeAt(++i))
  70. bytes = []
  71. bytes.push((codes[0] << 4) | ((codes[1] >> 2) & 0xf))
  72. bytes.push(((codes[1] & 0x3) << 6) | (codes[2] & 0x3f))
  73. ret.push(String.fromCharCode((bytes[0] << 8) | bytes[1]))
  74. }
  75. }
  76. return ret.join('')
  77. }
  78. function StringToUint8Array(string) {
  79. var binLen, buffer, chars, i, _i
  80. binLen = string.length
  81. buffer = new ArrayBuffer(binLen)
  82. chars = new Uint8Array(buffer)
  83. for (var i = 0; i < binLen; ++i) {
  84. chars[i] = String.prototype.charCodeAt.call(string, i)
  85. }
  86. return buffer
  87. }
  88. function uuid(len, radix = 16) {
  89. var chars =
  90. '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
  91. var uuid = [],
  92. i
  93. radix = radix || chars.length
  94. if (len) {
  95. for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
  96. } else {
  97. var r
  98. uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
  99. uuid[14] = '4'
  100. for (i = 0; i < 36; i++) {
  101. if (!uuid[i]) {
  102. r = 0 | (Math.random() * 16)
  103. uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r]
  104. }
  105. }
  106. }
  107. return uuid.join('')
  108. }
  109. var hexCache = {}
  110. function stringToHex(str) {
  111. var val = hexCache[str]
  112. if (val) return val
  113. for (var i = 0; i < str.length; i++) {
  114. if (val == '') val = str.charCodeAt(i).toString(16)
  115. else val += str.charCodeAt(i).toString(16)
  116. }
  117. hexCache[str] = val
  118. return val
  119. }
  120. function getBoolean(str, defaultValue) {
  121. if (typeof str === 'string') return str.toLocaleLowerCase() === 'true'
  122. else if (typeof str === 'boolean') return str
  123. else if (typeof str === 'number') return !!str
  124. else if (str === undefined) return defaultValue
  125. else return !!str
  126. }
  127. function getNumber(str, defaultValue) {
  128. if (typeof str === 'number') return isNaN(str) ? defaultValue : str
  129. else if (typeof str == 'string')
  130. return isNaN(Number(str)) ? defaultValue : Number(str)
  131. else return defaultValue
  132. }
  133. function StringToUint8Array2(str) {
  134. const encoder = new TextEncoder()
  135. return encoder.encode(str)
  136. }