有关手机中文问题传输的解决办法

来源:互联网 发布:网络词帅t是什么意思 编辑:程序博客网 时间:2024/04/28 08:19
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>服务器到客户端:----------------------------------------------------------------------下面代码是服务器端把字符写到Client端,经过gbEncoding()方法,所有的字符编码成:/uXXXX.----------------------------------------------------------------------代码:--------------------------------------------------------------------------------/** * Write the String data * * @param out * @param value */ public static void writeUnicode(final DataOutputStream out, final String value) throws ActionException { try { final String unicode = StringFormatter.gbEncoding( value ); final byte[] data = unicode.getBytes(); final int dataLength = data.length; System.out.println( "Data Length is: " dataLength ); System.out.println( "Data is: " value ); out.writeInt( dataLength ); out.write( data, 0, dataLength ); } catch (IOException e) { throw new ActionException( IMDefaultAction.class.getName(), e.getMessage() ); } }------------------------------------------------------------------------------------------------------------------------------------------------------以下代码是gbEncoding()方法,把双字节字符转换成/uXXXX,ASIIC码在前面补00。----------------------------------------------------------------------/*** This method will encode the String to unicode.** @param gbString* @return*/代码:--------------------------------------------------------------------------------public static String gbEncoding( final String gbString ) { char[] utfBytes = gbString.toCharArray(); String unicodeBytes = ""; for( int byteIndex = 0; byteIndex < utfBytes.length; byteIndex ) { String hexB = Integer.toHexString( utfBytes[ byteIndex ] ); if( hexB.length() <= 2 ) { hexB = "00" hexB; } unicodeBytes = unicodeBytes "//u" hexB; } System.out.println( "unicodeBytes is: " unicodeBytes ); return unicodeBytes; }------------------------------------------------------------------------------------------------------------------------------------------------------在客户端收到服务器的数据,先将其一个一个字符解码。双字节显示正常。----------------------------------------------------------------------代码:--------------------------------------------------------------------------------/** * This method will decode the String to a recognized String * in ui. * @param dataStr * @return */private StringBuffer decodeUnicode( final String dataStr ) { int start = 0; int end = 0; final StringBuffer buffer = new StringBuffer(); while( start > -1 ) { end = dataStr.indexOf( "//u", start 2 ); String charStr = ""; if( end == -1 ) { charStr = dataStr.substring( start 2, dataStr.length() ); } else { charStr = dataStr.substring( start 2, end); } char letter = (char) Integer.parseInt( charStr, 16 ); // 16进制parse整形字符串。 buffer.append( new Character( letter ).toString() ); start = end; } return buffer;}------------------------------------------------------------------------------------------------------------------------------------------------------客户端到服务器:----------------------------------------------------------------------客户端使用下面方法把手机端的字符编码成ISO-8859-1,传给服务器。----------------------------------------------------------------------代码:-------------------------------------------------------------------------------- /** * write the String data * @param value * @param outData */ private void writeSjis(DataOutputStream outData, String value) { try { byte[] data = null; // data = ( value ).getBytes( "UTF-8" ); data = ( value ).getBytes( "ISO8859_1" ); outData.writeInt(data.length); outData.write(data, 0, data.length); System.out.println(" data.length: " data.length); System.out.println(" data.value: " value); } catch (Exception ex) { System.out.println(" write error "); ex.printStackTrace(); } }------------------------------------------------------------------------------------------------------------------------------------------------------服务器端收到客户端字符流,是用下面方法将其转为UTF-8,以后的操作都是基于UTF-8编码。SQLServer可能会由于内吗不通有不同的变换,所以存取数据库是还要是具体的DB内码作相应的处理。----------------------------------------------------------------------代码:--------------------------------------------------------------------------------/** * * @param iso * @return */ public static String isoToUtf( final String iso ) { String utfString = iso; if( iso != null ) { try { utfString = new String( iso.getBytes( "ISO-8859-1" ), "UTF-8" ); } catch ( UnsupportedEncodingException e ) { utfString = iso; } } else { utfString = ""; } return utfString; }注:本方法应该不是最有效的,但是只要手机支持unicode的gb2312编码,应该都可以显示正常。不正之处,请各位到:http://www.ebds.com.cn/bbs/讨论讨论。
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 六龄牙蛀了怎么办 小孩六龄牙坏了怎么办 9岁六龄齿坏了怎么办 恋物癖自己怎么办 我恋白袜怎么办 2017超标电动车怎么办 超标电动车怎么办 小孩眼睛红肿怎么办 小孩红眼睛怎么办 宝宝使劲眨眼睛怎么办 幼儿嗓子疼怎么办 心里怨气太大怎么办 孩子没有自信怎么办 苹果手机卡怎么办 sonys39h死机怎么办 三星m2071卡纸怎么办 qq连接超时怎么办 三星打印机员工怎么办 没有学历证明怎么办 房间有蚊子怎么办 房间蚊子多怎么办 房间蚊子很多怎么办 小区野狗太多怎么办 狗狗吃太多呕吐怎么办 贴吧id被禁封怎么办 汽车动力不够怎么办 现在打仗老百姓怎么办 捡到一只鸺鹠怎么办 财产权受到侵害怎么办 星巴克怎么办会员卡 下属不听话怎么办 下属欺骗领导怎么办 下属不服从领导怎么办 公务员专业限制怎么办 旅游结婚怎么办婚礼 旅行结婚仪式怎么办 旅行结婚婚礼怎么办 导游强制购物怎么办 想要二胎却怀不上怎么办 村干部违法乱纪怎么办 得了肝炎怎么办