GB2312UTF8

utf-8 and gb2312 converter

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.gf.qytechs.cn/scripts/450973/1091107/GB2312UTF8.js

  1. // ==UserScript==
  2. // @name GB2312UTF8
  3. // @namespace ucdrs.superlib.net
  4. // @version 1.0
  5. // @description utf-8 and gb2312 converter
  6. // @license copyright http://freecode-freecode.blogspot.com/2008/11/how-to-gbkgb2312-and-utf-8-encoding.html, mod by https://gist.github.com/19317362/a1d8e40bfb6587463d4d
  7. // ==/UserScript==
  8.  
  9. GB2312UTF8 = {
  10. Dig2Dec : function(s){
  11. var retV = 0;
  12. if(s.length == 4){
  13. for(var i = 0; i < 4; i ++){
  14. retV += eval(s.charAt(i)) * Math.pow(2, 3 - i);
  15. }
  16. return retV;
  17. }
  18. return -1;
  19. } ,
  20.  
  21. Hex2Utf8 : function(s){
  22. var retS = "";
  23. var tempS = "";
  24. var ss = "";
  25. if(s.length == 16){
  26. tempS = "1110" + s.substring(0, 4);
  27. tempS += "10" + s.substring(4, 10);
  28. tempS += "10" + s.substring(10,16);
  29. var sss = "0123456789ABCDEF";
  30. for(var i = 0; i < 3; i ++){
  31. retS += "%";
  32. ss = tempS.substring(i * 8, (eval(i)+1)*8);
  33. retS += sss.charAt(this.Dig2Dec(ss.substring(0,4)));
  34. retS += sss.charAt(this.Dig2Dec(ss.substring(4,8)));
  35. }
  36. return retS;
  37. }
  38. return "";
  39. } ,
  40.  
  41. Dec2Dig : function(n1){
  42. var s = "";
  43. var n2 = 0;
  44. for(var i = 0; i < 4; i++){
  45. n2 = Math.pow(2,3 - i);
  46. if(n1 >= n2){
  47. s += '1';
  48. n1 = n1 - n2;
  49. }
  50. else
  51. s += '0';
  52. }
  53. return s;
  54. },
  55.  
  56. Str2Hex : function(s){
  57. var c = "";
  58. var n;
  59. var ss = "0123456789ABCDEF";
  60. var digS = "";
  61. for(var i = 0; i < s.length; i ++){
  62. c = s.charAt(i);
  63. n = ss.indexOf(c);
  64. digS += this.Dec2Dig(eval(n));
  65. }
  66. return digS;
  67. },
  68.  
  69. GB2312ToUTF8 : function(s1){
  70. var s = escape(s1);
  71. var sa = s.split("%");
  72. var retV ="";
  73. if(sa[0] != ""){
  74. retV = sa[0];
  75. }
  76. for(var i = 1; i < sa.length; i ++){
  77. if(sa[i].substring(0,1) == "u"){
  78. //alert(this.Str2Hex(sa[i].substring(1,5)));
  79. retV += this.Hex2Utf8(this.Str2Hex(sa[i].substring(1,5)));
  80. if(sa[i].length){
  81. retV += sa[i].substring(5);
  82. }
  83. }
  84. else{
  85. retV += unescape("%" + sa[i]);
  86. if(sa[i].length){
  87. retV += sa[i].substring(5);
  88. }
  89. }
  90. }
  91. return retV;
  92. },
  93.  
  94. UTF8ToGB2312 : function(str1){
  95. var substr = "";
  96. var a = "";
  97. var b = "";
  98. var c = "";
  99. var i = -1;
  100. i = str1.indexOf("%");
  101. if(i==-1){
  102. return str1;
  103. }
  104. while(i!= -1){
  105. if(i<3){
  106. substr = substr + str1.substr(0,i-1);
  107. str1 = str1.substr(i+1,str1.length-i);
  108. a = str1.substr(0,2);
  109. str1 = str1.substr(2,str1.length - 2);
  110. if(parseInt("0x" + a) & 0x80 == 0){
  111. substr = substr + String.fromCharCode(parseInt("0x" + a));
  112. }
  113. else if(parseInt("0x" + a) & 0xE0 == 0xC0){ //two byte
  114. b = str1.substr(1,2);
  115. str1 = str1.substr(3,str1.length - 3);
  116. var widechar = (parseInt("0x" + a) & 0x1F) << 6;
  117. widechar = widechar | (parseInt("0x" + b) & 0x3F);
  118. substr = substr + String.fromCharCode(widechar);
  119. }
  120. else{
  121. b = str1.substr(1,2);
  122. str1 = str1.substr(3,str1.length - 3);
  123. c = str1.substr(1,2);
  124. str1 = str1.substr(3,str1.length - 3);
  125. var widechar = (parseInt("0x" + a) & 0x0F) << 12;
  126. widechar = widechar | ((parseInt("0x" + b) & 0x3F) << 6);
  127. widechar = widechar | (parseInt("0x" + c) & 0x3F);
  128. substr = substr + String.fromCharCode(widechar);
  129. }
  130. }
  131. else {
  132. substr = substr + str1.substring(0,i);
  133. str1= str1.substring(i);
  134. }
  135. i = str1.indexOf("%");
  136. }
  137.  
  138. return substr+str1;
  139. }
  140. };

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址