可以看得出来是每两个&#xxx组成一个汉字,可能是一种特殊的unicode格式吧,谁能帮帮我,我现在在导出这样的数据到数据库中,可是却不知道该怎么样处理这样的数据.

解决方案 »

  1.   

    应该是 UTF-8 的编码.
    ;&#179  只需要把其中的 179 变为 byte 数据,再把这样的 byte[] 构造为一个 String
      

  2.   

    前面的两个字:“统计”Í 0xCD
    ³ 0xB3
    两个字节的汉字内码即:CDB3¼ 0xBC
    Æ 0xC6
    两个字节的汉字内码即:BCC6使用WINDOWS自带的内码--区位输入法,输入CDB3即为“统”,输入BCC6即为“计”。所以上面的每两个字节表示一个汉字。并且是汉字的内码。
      

  3.   

    输入CDB3即为“统”,输入BCC6即为“计”,这是内码输入方式。205 (0xCD) 减去 160 (0xA0) 即得汉字所在区为45。
    179 (0xB3) 减去 160 (0xA0) 即得汉字所在位为19。输入4519为“统”,输入2838为“计”,这是区位码输入方式。
      

  4.   

    不用谢啊,相互学习,共同进步!// Convert.javapublic class Convert
    {
    public static void main(String[] args) throws Exception
    {
    // 汉字内码
    byte[] data = new byte[] 
    {
    (byte)205, (byte)179, (byte)188, (byte)198, (byte)202, (byte)253, 
    (byte)190, (byte)221, (byte)180, (byte)243, (byte)178, (byte)187, 
    (byte)196, (byte)220, (byte)201, (byte)250, (byte)179, (byte)201, 
    (byte)190, (byte)178, (byte)204, (byte)172, (byte)177, (byte)168, 
    (byte)177, (byte)237, (byte)206, (byte)196, (byte)188, (byte)254
    };

    System.out.write(data);
    System.out.println();
    }
    }控制台输出为:统计数据大不能生成静态报表文件
    Press any key to continue...
      

  5.   

    您可以先从原始文件中提取出第一个汉字内码数据,一个汉字两个字节,将这两个字节放到byte数组中,再使用PrintWriter把这个数组写出到文件,继续下一个汉字内码,到文件结束,就搞定了。
      

  6.   

    to 李祖祥:
    呵呵,十分感谢,可能是我的意思没有说明白,我说的意思是:如果现在有大量的这样的字符串存在于数据库中,而且可能在&#xxx之间夹杂的有英语字符,而现在我要把这样的字符串转化成正常显示的字符串,英文就显示成英文,&#显示成中文,然后更新数据库中原来的字段成为能正常显示的字符.希望你能帮我想出一个更好的方法.先谢谢了.
      

  7.   

    我的数据是这样的 江蘇舜天股份有限公司
    请问和楼主的数据有什么区别?
      

  8.   

    // Convert.javaimport java.util.regex.*;
    import java.io.*;public class Convert
    {
    public static String toGB(String original) throws IOException
    {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);

    Pattern pattern = Pattern.compile("&#\\d\\d\\d;"); //正则表达式匹配&#???;
    Matcher matcher = pattern.matcher(original);

    int lastEnd = 0; //上一次匹配的结束位置
    while (matcher.find()) //找一下个匹配串
    {
    if (lastEnd != matcher.start()) //写正常英文字符
    {
    dos.write(original.substring(lastEnd, matcher.start()).getBytes());
    }

    String oneByte = matcher.group();
    oneByte = oneByte.substring(2, 5); //取出&#???;中的???
    int data = Integer.parseInt(oneByte);
    dos.write(data);

    lastEnd = matcher.end();
    }

    if (lastEnd < original.length()) //写剩下的正常英文字符
    {
    dos.write(original.substring(lastEnd).getBytes());
    }

    String converted = new String(baos.toByteArray());

    dos.flush();
    dos.close();

    return converted;
    }

    public static void main(String[] args) throws IOException
    {
    String originalA = "RPC-E1&#205;&#179;&#188;&#198;&#202;&#253;"
    + "&#190;&#221;&#180;&#243;,&#178;&#187;&#196;&#220;&#201;"
    + "&#250;&#179;&#201;&#190;&#178;&#204;&#172;&#177;&#168;"
    + "&#177;&#237;&#206;&#196;&#188;&#254;";
    String originalB = "RPC-E1&#205;&#179;Java&#188;&#198;&&#202;&#253;MS"
    + "&#190;&#221;;&#180;&#243;,&#178;&#187;#&#196;&#220;PRC&#201;"
    + "&#250;&#&#179;&#201;#&&#190;&#178;;&#1&#204;&#172;&*&#177;&#168;"
    + "&#177;&#237;Hello, World&#206;&#196;&#188;&#254;China!";
    String convertedA = Convert.toGB(originalA);
    String convertedB = Convert.toGB(originalB);
    System.out.println(convertedA);
    System.out.println(convertedB);
    }
    }
    输出为:
    RPC-E1统计数据大,不能生成静态报表文件
    RPC-E1统Java计&数MS据;大,不#能PRC生&#成#&静;&#1态&*报表Hello, World文件China!
    Press any key to continue...这两组测试数据都没有问题。希望对您能够有帮助!
      

  9.   

    顶  
    但 “&#27743;&#34311;&#33308;&#22825;&#32929;&#20221;&#26377;&#38480;&#20844;&#21496;”
    和 RPC-E1&#205;&#179;&#188;&#198;&#202;&#253;&#190;&#221;&#180;&#243;,&#178;&#187;&#196;&#220;&#201;&#250;&#179;&#201;&#190;&#178;&#204;&#172;&#177;&#168;&#177;&#237;&#206;&#196;&#188;&#254;
    编码应该是不一样的,请问楼上的怎么解决呢?谢谢
      

  10.   

    to stevenmo(凯)
    已在你开的那个贴中解决了。
      

  11.   

    谢谢   我明白了  但我想问你另一个问题  这些“&#27743;&#34311;&#33308;&#22825;&#32929;&#20221;&#26377;&#38480;&#20844;&#21496;”
    是什么格式的编码?
      

  12.   

    不用谢!
    是Unicode编码.
    27743转换为16进制为0x6c5f用System.out.println('\u6c5f');
    即输出“江”.
    System.out.println((char)27743);
    输出一样的。
      

  13.   

    那我  String company = “&#27743;&#34311;&#33308;&#22825;&#32929;&#20221;&#26377;&#38480;&#20844;&#21496;”;
     company = new String(company,"GBK");
    System.out.println(company);
    为什么还是输入unicode 呢?
    这有什么问题吗?
      

  14.   

    27743才是江的Unicode.
    而&#27743;是处理后产生的(猜测:你用的可能不是WINDOWS的操作系统吧。)company = new String(company,"GBK");
    要这样转换的话,company必须为一个byte[],而现在company为String.
    就算是用company.getBytes(),返回的也是'&','#','2','7'等等对应的字节值
    而无法把27743(0x6c5f)作为整体看待。
      

  15.   

    System.out.println("&#27743;&#34311;&#33308;&#22825;&#32929;&#20221;&#26377;&#38480;&#20844;&#21496;".getBytes().length);
    输出为80
    即字符串中的一个英文字符对应一个字节了。
      

  16.   

    unicode 确实是由在linux 上的系统产生写进数据库的 
    呵呵  以前还一直以为是编码环境的问题呢  真是谢谢你啦
      

  17.   

    &#xxx字符串是从unix文本中导出来的,后来发现因为unix要换行,但是它换行不管是不是一个汉字就换行了,半个汉字也换,所以字符串有换行符,当把含有换行符的字符串弄到windows下时,就形成了如下的东西:
     &#202;&#175;&#188;&#210;&#215;&#175;&#186;&#205;&#189;&#248;&#179
    ;&#204;&#206;&#202;&#204;&#226;&#163;&#186;
      2004&#196;&#234;7&#212;&#194;20&#200;&#213;&#205;&#237;&#201;&#207;&#206;&#210
    ;&#195;&#199;&#189;&#171;21&#186;&#197;&#181;&#196;&#189;&#218;&#196;&#191;&#202
    ;&#177;&#188;&#228;&#177;&#237;&#204;&#237;&#188;&#211;&#201;&#207;&#163;&#172;&#2
    @12;&#203;&#208;&#208;&#186;&#243;&#163;&#172;&#201;&#207;&#210;&#178;
    不明白为什么会产生个@字符,而且有的是以&#前,有的在后,有的在是中间,还有的是在数字中间.
    问怎么去年不正常的换行符和奇怪的@字符,从面可以顺利转化呢?
      

  18.   

    <--------------高手看过来! 能不能搞定这个?
    http://community.csdn.net/Expert/topic/3472/3472337.xml?temp=.2961847
      

  19.   

    // 统计数据大,不能生成静态报表文件&#205;&#179;&#188;&#198;&#202;&#253;&#190;&#221;&#180;&#243;,&#178;&#187;&#196;&#220;&#201;&#250;&#179;&#201;&#190;&#178;&#204;&#172;&#177;&#168;&#177;&#237;&#206;&#196;&#188;&#254;
    public static void main(String[] args) {
          String src = "&#205;&#179;&#188;&#198;&#202;&#253;&#190;&#221;&#180;&#243;,&#178;&#187;&#196;&#220;&#201;&#250;&#179;&#201;&#190;&#178;&#204;&#172;&#177;&#168;&#177;&#237;&#206;&#196;&#188;&#254;";
          System.out.println(new String(decode(src,null)));
    }
       public static byte[] decode(String source, String encoding) {
          if (source == null) {
            source = "";
          }
          StringBuffer buf = new StringBuffer();
          StringBuffer tmp = null;
          char c;
          for (int j = 0; j < source.length(); j++) {
            c = source.charAt(j);
            if (tmp == null) {
              if (c == '&') { // 找到了可能的转义字符开端
                tmp = new StringBuffer();
              }
              else {
                buf.append(c);
              }
            }
            else {
              if (c == ';') { // 转义字符的结束标志
                if(tmp.charAt(0)=='#'){
                  buf.append((char)(Integer.parseInt(tmp.substring(1))));
                }
                else { // 不是转义
                  buf.append(tmp.toString()).append(';');
                }
                tmp = null;
              }
              else {
                tmp.append(c); // 可能是转义字符的一部分
              }
            }
      
          }
          if (tmp != null) {
            buf.append(tmp.toString());
            tmp = null;
          }
          try {
            return buf.toString().getBytes(encoding);
          }
          catch (UnsupportedEncodingException ex1) {
            return buf.toString().getBytes();
          }
        }http://www.yi-dao.com