比如汉字“我”,假设它的值是22530(只是假设,具体多少我没查)
而日文的“マ”的值也可能是22530(也是假设)或韩文的“찾”
在网络上传输是不能以高字节传输,因为网络底层最后只认无符号char,相当于java中的byte,所以
22530这个int要转换为字节数组,
byte[0] = (22530 >>
&0xFF;
byte[1] = 22530 &0xFF;
具体多少我没算,假设是byte[125,231]
这样的字节传到服务端到是表示汉字“我”还是日文的“マ”还是其它狗屁?
一般通讯协议中会告诉对字符集,比如HTTP在请求时告诉服务端:
ContentType="xxxxxxxxxx";charset="GKB";
这时服务端就知道现在接收到的[125,231]是GKB的“我”而不是其它文字。
上面是标准的通信过程。但如果有些水平很差的程序员在提交请求时没有通知服务端字符集,那服务端就没办法了。
只好按最常用的字符集来猜一个默认的。
这还不错,最要命的是写服务器的程序员水平和见识很差时,就要命了。就象写老版本的TOMCAT的程序员,他自己生在西方,以为全世界所有人都用的是26个字母加一些符号,所以他不管客户端提交什么都按ISO-8859-1来算,结果可想而知。
没办法,谁让我们用GBK的人不会写tomcat呢,只好先把让那个差劲的程序员错误生成的String用ISO-8859-1还原成
[125,231],再重新用GKB生成String.
分享到:
相关推荐
本文将深入探讨标题提及的“DELPHI 10.3编码转换:iso-8859-1转GBK,GBK转iso-8859-1”,以及在二维码生成中的应用,以解决乱码问题。 首先,我们需要理解两种编码系统的基础知识。`ISO-8859-1`是一种单字节编码...
byte[] isoBytes = new String(bytes, "ISO-8859-1").getBytes("ISO-8859-1"); ``` - **从`byte[]`到`String`**: - `public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException` ...
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); } catch (Exception e) { System.err.println(e.getMessage()); } return tempStr; } ``` 接下来,我们谈谈抽象类...
解决Struts2上传时候使用UTF-8的冲突问题... * 对于请求流,使用的ISO-8859-1编码方式进行,如果发现请求内容中出现名称乱码,请使用new String(str.getBytes("ISO-8859-1"),"GBK")进行编码转换。 包里面已经含有源代码
String str3 = new String(buf3,"ISO8859-1");//错误解码 //编码解码4:错误编码正确解码 String str4 = "你好"; byte[] buf4 = str4.getBytes("ISO8859-1");//错误编码 String str4 = new String(buf4,"GBK")...
`str.getBytes("ISO-8859-1")`首先将字符串按照ISO-8859-1编码转换成字节数组,然后再通过`new String(byte[], "GBK")`构造函数将其转换为GBK编码的字符串。这种方法适用于对已知编码的字符串进行转换。 #### 方法...
String unicodeStr = new String(gbkBytes, "GBK"); ``` 2. **Unicode转GBK(字符串)**: - 反之,如果已有Unicode字符串,需要编码成GBK,可以使用`CharsetEncoder`: ```java String unicodeStr = ...; // ...
例如,`new String(str.getBytes("gbk"), "iso-8859-1")` 和 `new String(str.getBytes("iso-8859-1"), "gbk")` 分别用于转换。 2. 引用Java类: - 为了减少重复工作,可以创建一个`lib.jsp`页面,包含所有常用的...
这段代码中,首先通过`getBytes("ISO-8859-1")`方法将字符串转换为ISO-8859-1编码的字节数组,然后使用`new String(...)`构造函数,将字节数组按照GBK编码重新解析为字符串。这里的关键在于两次编码的转换,如果原始...
String str = new String(rs.getBytes(1), "GBK"); ``` 如果页面使用的编码与数据库不一致,则可能需要进行编码转换处理。 ##### 使用GBK作为数据库字符编码 如果数据库使用GBK编码,则可以按照以下方式配置...
String st = new String(ra.readLine().getBytes("ISO-8859-1"), "GBK"); ``` 读取文件时,首先通过 `readLine()` 方法读取一行内容,然后将其以 `ISO-8859-1` 编码的形式转换为字节数组,再使用 `GBK` 编码解码...
- `str = new String(rs.getBytes(1), "GBK")` 值得注意的是,即使页面使用UTF-8,数据库中存储的也是UTF-8,依然可以使用GBK编码进行解码来正确显示中文。 #### 2. 使用GBK进行数据库连接 同样地,可以通过设置`...
public String toISO_8859_1(String str) throws UnsupportedEncodingException { return changeCharset(str, "ISO-8859-1"); } ``` #### 3. UTF-8 (8位统一码转换格式) - **定义**:UTF-8是一种可变长度的...
return new String(str.getBytes("ISO-8859-1"),"GBK"); } 3. 在数据库中存储和读取中文数据 对于大多数数据库的 JDBC 驱动程序,在 Java 程序和数据库之间传递数据都是以 ISO-8859-1 为默认编码格式,所以,我们...
要将字符串编码为字节数组,可以使用`getBytes()`方法,同样需要指定编码: ```java String str = "你好,世界"; byte[] encodedBytes = str.getBytes("GBK"); // 使用GBK编码编码字符串 ``` 3. 文件读写中的编码...
System.out.println(new String(str.getBytes("ISO-8859-1"), "ISO-8859-1")); // 输出乱码 System.out.println(new String(str.getBytes("UTF-8"), "UTF-8")); // 输出中国 System.out.println(new String(str....
1. **GBK编码**:GBK是中国大陆广泛使用的汉字编码标准,它是在GB2312基础上扩展的,包含了更多的汉字和符号,能表示20902个汉字以及一些其他符号,适用于简体中文环境。 2. **GB2312编码**:GB2312是早期的中文...
str = new String(str.getBytes("ISO-8859-1"), "GB2312"); ``` 这里 `getString` 方法默认返回的是按照ISO-8859-1编码的字符串。通过 `getBytes("ISO-8859-1")` 和 `new String(..., "GB2312")` 的组合,可以将该...