`
lhx222
  • 浏览: 73553 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

源文件与操作系统文件编码冲突导致中文乱码问题

阅读更多
问题:Java Web程序中,开发环境是XP系统,原有程序保存的内容一起正常,到了部署环境是Linux,保存XML文件内容时出现中文乱码问题。中文内容使用ajax提交过来,在ACTION中URLDecoder.decode(BaseUtil.toString(request.getParameter("desc")),"utf-8")获取,两种操作系统环境下在ACTION中拿到的中文内容打印出来是正确的,但以文件流形式保存到本地文件系统(.xml)中时产生了区别:linux下的操作系统,保存中文(到XML文件,xml的encoding为GBK)设置为GBK时,乱码,xml设置为UTF-8以及中文内容设置为UTF-8时正确;windows下的操作系统,设置为GBK时,正确。
错误原因:经过调试,发现是文件内容元编码与不同操作系统文件编码相互冲突导致的,对操作系统不太熟悉,估计是当时的开发环境的Window系统是GBK的,而部署环境的Linux操作系统是UTF-8的。
解决方式:大概来看,在传递到ACTION中正常的中文内容,在Windows下写入的流和文件的编码都设置为GBK、Linux下都设置为UTF-8可以避免乱码问题(保存的文件编码与操作系统的一致).另外,一个统一的解决方法是,文件写入流使用FileOutputStream而不使用FileWriter
...                     
OutputFormat format = OutputFormat.createPrettyPrint();
FileOutputStream fos = new FileOutputStream(fileURL);
XMLWriter writer = new XMLWriter(fos, format);
...
//以下的方式在不同的操作系统下有差异,会出现乱码            
//OutputFormat format = OutputFormat.createPrettyPrint(); 
//format.setEncoding("UTF-8");
//XMLWriter writer = new XMLWriter(new FileWriter(new File(fileURL)),format);
...
   
一些详细的测试见附件。
小结:这个属于文件源编码与操作系统文件编码的问题,如果内容编码与操作系统的编码不一致就会出现乱码。FileOutputStream类的接口估计是使用当前操作系统默认的文件编码,具有教好的可移植性
分享到:
评论

相关推荐

    VS2010修复工具(修复copy中文乱码问题)

    4. 字符编码与系统配置冲突:操作系统的区域和语言设置可能与项目编码需求不符。 Java编写的应用程序通常采用Unicode编码,能较好地处理多语言环境,因此这个“VS2010修复工具”可能是通过将VS2010中的文本数据转换...

    关于Java Web中中文乱码问题的探讨.pdf

    在需要与旧版中文操作系统兼容时,GBK编码是一个常用选择。 UTF-8编码是一种变长字符编码,它能使用1到4个字节来编码Unicode字符集,从而解决国际标准编码之间存在的冲突问题。在UTF-8编码中,英文字符用8位(1个...

    MyEclipse字符编码设置

    另外,如果上述方法无效,还应考虑操作系统字体文件是否存在问题,因为损坏的字体文件也可能导致无法正常显示中文字符。遇到此类问题时,检查和修复系统字体文件是必要的步骤。 总之,理解和正确设置MyEclipse的...

    批量转换C#源文件代码页

    在开发大型项目时,尤其当团队成员来自不同地区,使用不同编码习惯时,统一编码格式显得尤为重要,它可以避免因编码不一致导致的编译错误或乱码问题。 该工具包含了源代码和可执行文件,这使得用户可以根据自身需求...

    OpenOffice安装和乱码相关资料.zip

    3. **导入/导出数据乱码**:在导入或导出CSV等数据文件时,确保源文件的编码与OpenOffice的设置一致。 4. **字体问题**:某些特定的字体可能未在系统中安装,导致无法正确显示特殊字符。安装缺失的字体可以解决这个...

    ascii转换软件U2WIN

    这在处理跨平台数据传输、文本文件兼容性问题,或者解决因编码不匹配导致的乱码问题时非常有用。 在日常工作中,我们可能会遇到以下几种情况需要使用ASCII转换软件: 1. **跨平台兼容性**:不同的操作系统或编程...

    gbk.rar_Big!_GBK

    过程中需要处理编码冲突和特殊字符问题。 综上所述,这个压缩包包含了一个基于VB6.0开发的、运行于Windows XP系统下的字符编码转换工具,能够帮助用户在GBK和Big5编码之间进行转换,解决跨编码环境的文本处理问题。

    文本内码转换

    在这个主题中,我们主要关注如何将文本从一种内码格式转换为另一种,以便在不同的操作系统、程序或设备间正确显示和处理文本。 首先,让我们了解什么是内码。内码,也称为字符编码,是计算机内部存储、处理和传输...

    深入理解计算机系统1

    《深入理解计算机系统1》这篇文章主要探讨了计算机系统的基础知识,包括编码、程序编译过程、硬件组成、高速缓存以及操作系统和信息的表示与存储。 首先,文章讲解了字符编码,从ASCII码开始,它是用0-127来表示...

    自绘滑动条,前面那个有乱码

    “自绘”是指开发者通过编写代码直接控制控件的绘制过程,而非依赖操作系统默认的绘制机制。“滑动条”是Windows GUI应用程序中常见的用户界面元素,用户可以通过它来选择一个范围内的值。 在压缩包中,`BitSlider....

    文件名提取器

    4. **编码问题**:文件名可能包含非ASCII字符,如中文、日文等,确保工具支持正确的字符编码,否则可能会出现乱码。 此外,对于开发者而言,了解这类工具的工作原理也非常重要。"文件名提取器"的实现通常基于操作...

    JSP 选题系统

    【j_tomexam_utf_hicode】可能是系统的源代码文件,其中“utf”可能表示字符编码为UTF-8,这对于处理多语言环境和防止乱码问题非常重要。“hicode”可能是开发者的特定命名约定或代码风格。 综上所述,JSP选题系统...

    winmerge.zip

    - **Unicode支持**:支持多种编码格式,确保在处理多语言文本时不会出现乱码问题。 **2. 安装与使用** - **安装过程**:`WinMerge-2.13.20-Setup.exe` 是WinMerge的安装程序,运行后按照提示完成安装。安装过程中...

    解决sublime+python3无法输出中文的问题

    - **检查系统编码**:确保操作系统的默认编码也是UTF-8,这样可以避免系统级别的编码问题。 - **检查Sublime Text版本**:不同版本的Sublime Text可能存在细微差别,请根据自己的版本进行相应的调整。 - **查看错误...

    android项目实战的结构文档

    - **源文件编码格式**:统一使用UTF-8编码格式,这种格式支持全球大部分语言,避免了因编码问题导致的乱码现象。 ##### 2. 命名规范 - **类名规范**:采用大驼峰命名法,即功能名+类型名的方式。 - **接口命名**:...

Global site tag (gtag.js) - Google Analytics