linux系统语言环境为GB18030,接收utf-8格式的报文为乱码

linux系统语言环境为GB18030,接收utf-8格式的报文为乱码,第1张

作为一个合格的程序员,在程序内部进行字符串传输和处理时,都必须使用 utf8 编码,只有在进行对外输出存储和显示的时候,才转换成 locale 编码。从外部读取字符串,也要先转换成 utf8 后在进行程序内处理。另外应用程序内部不应该嵌入编码字符串,应该只存在英文字符串,所有 CJK 字符串,都应该从外部专门读取,读取后或者生成外部字符串数据文件时,必须确定编码。

Windows 其实也是如此,不过 Windows 的输入输出是自动进行转换的,内部处理编码是 UCS 的某个吧?

你好,

在处理的流程中,在接收到客户传来的报文的时候进行编码转换。加上下面两个方法,在得到客户请求报文时只需调用第一个方法转换一下即可。

//中文字符处理

public String charSetConvert(String xmlRequest){

String charSet = NeopServerImpl.getEncoding(xmlRequest)

try {

byte[] b = xmlRequest.getBytes(charSet)

xmlRequest = new String(b, "UTF-8")

} catch (Exception e) {

logger.error("输入的内容不属于常见的编码格式,请再仔细核实", e)

}

return xmlRequest

}

public static String getEncoding(String str) {

String encode = "GB2312"

try {

if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GB2312

String s = encode

return s// 是的话,返回GB2312,以下代码同理

}

} catch (Exception e) {

logger.error("getEncoding异常---GB2312", e)

}

encode = "ISO-8859-1"

try {

if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是ISO-8859-1

String s1 = encode

return s1

}

} catch (Exception e) {

logger.error("getEncoding异常---ISO-8859-1", e)

}

encode = "UTF-8"

try {

if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是UTF-8编码

String s2 = encode

return s2

}

} catch (Exception e) {

logger.error("getEncoding异常---UTF-8", e)

}

encode = "GBK"

try {

if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GBK

String s3 = encode

return s3

}

} catch (Exception e) {

logger.error("getEncoding异常---GBK", e)

}

return ""// 到这一步,你就应该检查是不是其他编码啦

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10080462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存