`
yollywu
  • 浏览: 17754 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

碰到的一个编码问题

阅读更多
  系统有两个子系统,一个是BS的,一个是delphi做的CS,中间的数据传输是通过XML进行传输的。在XML传输的功能实现后,要求对XML进行加密解密.加密解密算法是CS端用delphi写的,然后这边用JAVA写个同样的算法。现在碰到的一个问题是:
  用该算法的时候,CS和BS各自都能够加解密,我这边的过程是这样的。我这边解密的过程是这样的,首先获取到CS那边的加密文件,然后通过
  
        StringBuffer strbuf = new StringBuffer();
	try {
		FileInputStream in = new FileInputStream(file);
		int size = 0;
		byte [] buf = new byte[1024];	
		while ((size=in.read(buf)) != -1) {
			strbuf.append(new String(buf,0,size));
		}
		
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
       return strbuf;
          

在得到返回的StringBuffer的基础上,对StringBuffer进行解密操作。
     
  StringBuffer xmlStr=new StringBuffer("");
       xmlStr.append(encode.UnEncryptString(readBuf,key));

然后在得到解密后的字符串写入XML文件
       有两种方式,一种是写入普通 ,另外一种是采用dom4j提供的字符串转XML的方式
     
       Document doc = DocumentHelper.parseText(xmlStr.toString());
       OutputFormat format = OutputFormat.createPrettyPrint();
       FileOutputStream writefile=new FileOutputStream(importFile);//输出流,用来接受生成的xml表示的doc	
       format.setEncoding("UTF-8");
       XMLWriter writer=new XMLWriter(writefile,format);  		
       writer.write(doc);

       最终不管我采用什么方式结论是中文始终是乱码。
       我想问的问题是
       1. 如果双方导入导出的都是标准的XML文件(UTF-8),在此基础上进行加密,
          那么在以后读取与写入文件(无论是字节流还是字符流或其他的)过程中,是不是都不涉及到转碼的  问题。
       2.在此过程中,正常的情况编码可能需要变化的是什么地方。
       3.一个前提是算法没有问题,单独的不涉及文件存储,双方是可以互加解密。
分享到:
评论
6 楼 sea7 2007-08-19  
new String(buf,0,size);
就会按本地字符集编码了
5 楼 cnng007 2007-08-19  
    FileInputStream in = new FileInputStream(file);  
    int size = 0;  
    byte [] buf = new byte[1024];     
    while ((size=in.read(buf)) != -1) {  
        strbuf.append(new String(buf,"UTF-8"));  
    }
3 楼 yollywu 2007-08-17  
UTF-8是用字节流转字符流的时候,我尝试过了,那种情况只是用来输出在控制台会正常,前提还是解码出来的中文是正常的。现在关键是解码出来的中文就是乱码
StringBuffer UnEncryptString(StringBuffer Source, StringBuffer Key) {
		// 对字符串解密(Src:源 Key:密匙)
		int KeyLen;
		int KeyPos;
		int offset;
		StringBuffer dest = new StringBuffer();
		int SrcPos;
		int SrcAsc;
		int TmpSrcAsc;
		KeyLen=Key.length();
		if (KeyLen == 0) {
			Key = new StringBuffer("XiongJunJie");
		}
		KeyPos = 0;
		offset = Integer.parseInt(Source.substring(0, 2), 16);
		SrcPos = 2;
		byte[] keybyte = Key.toString().getBytes();
		do {
			SrcAsc = Integer.parseInt(Source.substring(SrcPos, SrcPos + 2), 16);
			if (KeyPos < KeyLen)
				KeyPos = KeyPos + 1;
			else
				KeyPos = 1;
			TmpSrcAsc = SrcAsc ^ keybyte[KeyPos - 1];
			if (TmpSrcAsc <= offset)
				TmpSrcAsc = 255 + TmpSrcAsc - offset;
			else
				TmpSrcAsc = TmpSrcAsc - offset;
			if (TmpSrcAsc > 128) {
				offset = SrcAsc;
				int temp = TmpSrcAsc;
				SrcPos = SrcPos + 2;
				SrcAsc = Integer.parseInt(Source.substring(SrcPos, SrcPos + 2),
						16);
				if (KeyPos < KeyLen)
					KeyPos = KeyPos + 1;
				else
					KeyPos = 1;
				TmpSrcAsc = SrcAsc ^ keybyte[KeyPos - 1];
				if (TmpSrcAsc <= offset)
					TmpSrcAsc = 255 + TmpSrcAsc - offset;
				else
					TmpSrcAsc = TmpSrcAsc - offset;
				byte[] bytes = new byte[] { (byte) temp, (byte) TmpSrcAsc };
				dest = dest.append(new String(bytes));
			} else
				dest = dest.append((char) (TmpSrcAsc));
			offset = SrcAsc;
			SrcPos = SrcPos + 2;
		} while (SrcPos < Source.length() - 1);
		return dest;
	}

	String format(String s) {
		String s1 = null;
		int len = s.length();
		if (len == 0)
			s1 = "00";
		else if (len == 1)
			s1 = "0" + s;
		else if (len == 2)
			s1 = s;
		return s1;
	}

有人说不能用StringBuffer,所以正在改位取字节进行解密。用BS这边的加密解密,自己加的自己解是没问题的。
2 楼 Godlikeme 2007-08-17  
strbuf.append(new String(buf,0,size));
加密的byte[]到String是经过编码的,这样内容就乱了。

和语言的关系不大,两边过程要完全互逆。
加密后以什么样的charset保存的就以什么charset取出来。
String的charset和解码程序的要求,看看文档吧。

to ddandyy 说得是FileReader吧。

我觉得应该在new String 用"UTF-8".
1 楼 ddandyy 2007-08-17  
FileInputStream in = new FileInputStream(file, "UTF-8"); 

相关推荐

    Windows10 + qt5.8.0解决编码乱码问题总结.pdf

    为了解决这个问题,首先需要改变开发环境中的编码设置。在Qt的开发环境中,可以通过工具-&gt;选项-&gt;文件编码来设置编译器的默认编码。对于Windows系统而言,将其编码设置为GBK或GB2312可以有效解决代码中的中文注释和...

    SAS EG导入UTF-8编码的文本数据文件时的乱码问题解决方法

    SAS EG是一个图形用户界面的程序,它提供了数据管理、统计分析、报告创建等功能,但它在处理不同编码的文本文件时可能会遇到编码兼容性问题。 解决SAS EG导入UTF-8编码文本数据文件的乱码问题,通常需要在导入文件...

    hadoop中文乱码问题

    HDFS自身并不关心文件的编码,它只是作为一个字节流进行存储。如果在上传到HDFS的文件编码与Hadoop默认的UTF-8不符,下载时就会出现乱码。解决方式是确保在上传文件前将其转换为UTF-8编码。 3. **MapReduce处理...

    sqlite3 for delphi 解决中文乱码问题

    在使用SQLite3数据库引擎与Delphi集成开发过程中,经常遇到的一个挑战是中文字符显示为乱码。"sqlite3 for delphi 解决中文乱码问题"这个主题,正是针对这一问题提供了解决方案。这里我们将详细探讨SQLite3在Delphi...

    使用MyEclipse遇到的乱码问题解决

    在使用MyEclipse这款强大的Java集成开发环境时,开发者可能会遇到一个常见的问题——乱码问题。这主要体现在代码编辑器中显示的源代码字符编码不正确,或者在编译、运行过程中输出的文本出现乱码。本文将深入探讨...

    解决中文乱码问题

    UnicodeEncoding类是C#语言中的一个类,用于指定编码方式。它可以将Unicode字符编码为特定的编码方式,如UTF-8、GB2312等。在读取txt文件时,使用UnicodeEncoding类可以正确地读取中文字符。 知识点3:GB2312编码 ...

    web 开发中遇到的乱码问题

    在web开发过程中,乱码问题是一个常见的困扰,尤其是在处理文本数据时。乱码现象通常发生在字符编码不一致或处理不当的场景下。本篇将详细探讨这个问题,以及如何通过理解和运用正确的字符编码来解决它。 首先,...

    解决Ubuntu和Windows的文件乱码问题

    在使用不同操作系统处理文件时,文件乱码是一个常见问题,尤其是当涉及到Windows和Ubuntu这两种系统时。Windows系统通常使用GBK编码来处理中文,而Ubuntu系统默认使用UTF-8编码,这导致了两者在处理中文文件时出现...

    log4j乱码问题解决办法

    然而,在使用过程中可能会遇到字符编码的问题,特别是中文乱码的情况,这不仅会影响日志的可读性,还可能导致难以追踪的问题。本文将详细介绍如何通过修改`log4j.properties`配置文件来解决log4j中的乱码问题。 ###...

    JAVA 乱码问题集合

    在Java编程中,乱码问题是一个常见的困扰,尤其是在处理字符编码时。以下是一些关键的知识点,可以帮助理解和解决Java中的乱码问题。 首先,我们需要理解字符编码的基本概念。字符编码是用来表示文本的一种方式,...

    细说编码,检索乱码的一个ppt

    【编码详解:从汉字到乱码的解析】 编码是计算机处理文字和信息的关键技术,尤其在涉及多种语言和字符集的...在日常工作中,遇到乱码问题时,可以通过检查字符集设置、转换编码格式或使用兼容性更强的编码方式来解决。

    js出现乱码问题介绍大全

    JavaScript作为前端开发的核心技术之一,在处理字符编码方面同样会遇到各种各样的乱码问题。本文将详细介绍JavaScript中常见的乱码现象及其解决方案,帮助开发者更好地理解和解决这类问题。 #### 二、JS乱码问题...

    Java开发乱码问题解决方法汇总

    乱码问题的根源之一是项目中的编码方式不统一。因此,在项目中统一使用一种编码方式是非常重要的。例如,在Eclipse中,可以右键点击项目,选择Properties,设置项目的文本文件编码方式为UTF-8。 2. 设置web.xml编码...

    最全的编码问题,乱码问题,uft-8

    在实际开发过程中,编码问题主要出现在以下几个方面: 1. **源代码文件编码不一致**:开发环境中如果源代码文件的编码格式不一致(例如,有的文件使用UTF-8,有的文件使用GBK),很容易导致读取或解析时出现乱码。 ...

    windows cmd修改编码注册文件,解决使用aapt获取apk信息的乱码问题

    当你尝试在CMD中处理包含非ASCII字符(例如中文)的信息时,可能会遇到乱码问题。为了解决这个困扰,我们需要修改CMD的编码设置,使其能够正确地显示UTF-8编码的文本。 首先,我们需要理解CMD的编码配置是如何工作...

    Netty进制转换乱码问题

    这个问题通常是由于数据编码不一致或者处理方式不当所引起的。在本文中,我们将深入探讨Netty中的进制转换和字符编码,并提供解决方案。 首先,我们要明白Netty作为一个高性能的网络应用框架,它本身并不直接处理...

    解决中文乱码问题专题

    在计算机领域,中文乱码是一个常见的问题,尤其对于初学者来说,可能会遇到各种与之相关的困扰。本专题将深入探讨中文乱码问题的成因、解决方案以及预防措施,旨在帮助初学者更好地理解和处理这类问题。 一、中文...

    struts 中文乱码问题解决

    在IT领域,特别是Web开发中,Struts框架作为Java Web应用的一个重要组成部分,其在处理中文字符时常常遇到乱码问题。这个问题不仅影响了用户体验,也增加了开发者的调试难度。本文将深入探讨Struts框架中中文乱码的...

    asp与.net通信编码乱码问题

    在IT行业中,编程时常会遇到编码问题,尤其是在处理不同平台、语言或库之间的数据交换时。"asp与.net通信编码乱码问题"是常见的技术挑战之一。这个问题主要出现在使用ASP(Active Server Pages)和.NET Framework...

Global site tag (gtag.js) - Google Analytics