个人随笔
目录
Get请求链接参数有特殊字符的解决办法
2019-08-26 23:10:27

get请求,特殊字符,二进制。
我在调试websocket的时候,因为刚建立链接就需要将用户的信息传递过去,然后我的用户信息包括用户名,用户头像,头像中有/这个特殊字符,导致报错,当然第一次想到的肯定是进行编码啦。

1、URLEncode编码

首先我进行URLEncode编码,因为URLEncode是16进制的,没有/+这写特殊字符,然后提交上去,然而报错,有些字符不能后解码了。

2、Base64编码

然后尝试用Base64编码来,刚开始美滋滋没问题,但是有时候访问会出错,原来64进制有/这个东西,没办法,除非去改源码。

3、将字符串转换成二进制

这个是最终的解决办法,直接把字符串转换为二进制,然后传到后台再转回来,终于不报错啦,大家可以试下:http://www.myforever.cn

字符串二进制转换源码如下

  1. package com.suibibk.utils;
  2. public class BinaryStringConverteUtil {
  3. //将Unicode字符串转换成bool型数组
  4. public static boolean[] StrToBool(String input){
  5. boolean[] output=Binstr16ToBool(BinstrToBinstr16(StrToBinstr(input)));
  6. return output;
  7. }
  8. //将bool型数组转换成Unicode字符串
  9. public static String BoolToStr(boolean[] input){
  10. String output=BinstrToStr(Binstr16ToBinstr(BoolToBinstr16(input)));
  11. return output;
  12. }
  13. //将字符串转换成二进制字符串,以空格相隔
  14. public static String StrToBinstr(String str) {
  15. char[] strChar=str.toCharArray();
  16. String result="";
  17. for(int i=0;i<strChar.length;i++){
  18. result +=Integer.toBinaryString(strChar[i])+ " ";
  19. }
  20. return result;
  21. }
  22. //将二进制字符串转换成Unicode字符串
  23. public static String BinstrToStr(String binStr) {
  24. String[] tempStr=StrToStrArray(binStr);
  25. char[] tempChar=new char[tempStr.length];
  26. for(int i=0;i<tempStr.length;i++) {
  27. tempChar[i]=BinstrToChar(tempStr[i]);
  28. }
  29. return String.valueOf(tempChar);
  30. }
  31. //将二进制字符串格式化成全16位带空格的Binstr
  32. public static String BinstrToBinstr16(String input){
  33. StringBuffer output=new StringBuffer();
  34. String[] tempStr=StrToStrArray(input);
  35. for(int i=0;i<tempStr.length;i++){
  36. for(int j=16-tempStr[i].length();j>0;j--)
  37. output.append('0');
  38. output.append(tempStr[i]+" ");
  39. }
  40. return output.toString();
  41. }
  42. //将全16位带空格的Binstr转化成去0前缀的带空格Binstr
  43. public static String Binstr16ToBinstr(String input){
  44. StringBuffer output=new StringBuffer();
  45. String[] tempStr=StrToStrArray(input);
  46. for(int i=0;i<tempStr.length;i++){
  47. for(int j=0;j<16;j++){
  48. if(tempStr[i].charAt(j)=='1'){
  49. output.append(tempStr[i].substring(j)+" ");
  50. break;
  51. }
  52. if(j==15&&tempStr[i].charAt(j)=='0')
  53. output.append("0"+" ");
  54. }
  55. }
  56. return output.toString();
  57. }
  58. //二进制字串转化为boolean型数组 输入16位有空格的Binstr
  59. public static boolean[] Binstr16ToBool(String input){
  60. String[] tempStr=StrToStrArray(input);
  61. boolean[] output=new boolean[tempStr.length*16];
  62. for(int i=0,j=0;i<input.length();i++,j++)
  63. if(input.charAt(i)=='1')
  64. output[j]=true;
  65. else if(input.charAt(i)=='0')
  66. output[j]=false;
  67. else
  68. j--;
  69. return output;
  70. }
  71. //boolean型数组转化为二进制字串 返回带0前缀16位有空格的Binstr
  72. public static String BoolToBinstr16(boolean[] input){
  73. StringBuffer output=new StringBuffer();
  74. for(int i=0;i<input.length;i++){
  75. if(input[i])
  76. output.append('1');
  77. else
  78. output.append('0');
  79. if((i+1)%16==0)
  80. output.append(' ');
  81. }
  82. output.append(' ');
  83. return output.toString();
  84. }
  85. //将二进制字符串转换为char
  86. public static char BinstrToChar(String binStr){
  87. int[] temp=BinstrToIntArray(binStr);
  88. int sum=0;
  89. for(int i=0; i<temp.length;i++){
  90. sum +=temp[temp.length-1-i]<<i;
  91. }
  92. return (char)sum;
  93. }
  94. //将初始二进制字符串转换成字符串数组,以空格相隔
  95. public static String[] StrToStrArray(String str) {
  96. return str.split(" ");
  97. }
  98. //将二进制字符串转换成int数组
  99. public static int[] BinstrToIntArray(String binStr) {
  100. char[] temp=binStr.toCharArray();
  101. int[] result=new int[temp.length];
  102. for(int i=0;i<temp.length;i++) {
  103. result[i]=temp[i]-48;
  104. }
  105. return result;
  106. }
  107. public static void main(String[] args) {
  108. String abc="hiUSA合法-是康复科/safff12313";
  109. String b = StrToBinstr(abc);
  110. System.out.println(b);
  111. String c =BinstrToStr(b);
  112. System.out.println(c);
  113. }
  114. }
 416

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2