首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> J2ME >> 嵌入式 >> 正文

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


  服务器到客户端:
  下面代码是服务器端把字符写到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;
  }
【责编:admin】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·Oracle外键及外键约束修改行为
 ·开源软件测试工具学习专题
 ·JSP Web开发 入门基础到高手进阶教程
 ·JavaFX—是Java桌面的新希望么?
 ·安全至上 .NET开发安全策略
 ·测试用例设计之道-测试用例学习专题
 ·面向Java开发人员的Scala指南
 ·Java设计模式之实例详解
 ·Oracle数据库11g 面向DBA和开发人员的重要新特性
 ·桌面应用软件编程 J2SE技术详解
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航