【问题标题】:How to convert (Java) files with different encodings to the same?如何将具有不同编码的(Java)文件转换为相同的?
【发布时间】:2014-09-11 21:11:38
【问题描述】:

我正在 Eclipse 中开发一个大型 Java Web 应用程序,其文件具有不同的编码:一些是 UTF-8,另一些是 Cp1252,还有一些是 ISO-8859-1(没有 JSP 或 java 之间的区别源文件或 CSS)——但我知道每个文件的编码。

我正在将项目转换为 Maven,这是将它们全部转换为 UTF-8 的好机会。
当然我不想丢失一个字符(所以完全自动化的转换在这里不适用)。

我应该怎么做?是否有工具可以帮助我确保不会丢失任何特殊字符?
webapp 是意大利语的,所以,特别是在 JSP 中,可能会有很多重音字母(可能不是所有使用 HTML 实体的地方)。

该项目在 Eclipse 中,但如果可以使转换更容易,我可以使用外部编辑器。

【问题讨论】:

  • 您是否知道某些文件包含非 ASCII 字符(即在 0x20-0x7F 之外)?
  • @JimGarrison 绝对!重音字母无疑存在于许多文件中(其他字符也可能存在)。这就是为什么我需要一些东西来警告我,如果有任何字符可以转换成其他字符。

标签: java eclipse jsp encoding utf-8


【解决方案1】:

编写代码来转换编码非常容易——尽管我希望无论如何都有工具可以做到这一点。简单地说:

  • 为现有文件创建一个FileInputStream,并使用适当的编码将其包装在InputStreamReader
  • 为新文件创建一个FileOutputStream,并使用适当的编码将其包装在OutputStreamWriter
  • 遍历阅读器,将字符读入缓冲区并写出该缓冲区的内容(与您读取的字符一样多),直到您读完整个文件
  • 关闭所有资源(使用 try-with-resources 块自动关闭)

使用Files.newBufferedReaderFiles.newBufferedWriter,前两个步骤也更简单。

【讨论】:

  • 这和在一个好的编辑器(即 Notepad++)中打开一个具有特定编码的文件然后将文件保存在另一个文件中不一样吗?
  • @watery:保存在另一个编辑器中?您不需要这样做 - 您应该能够在同一个编辑器中保存。是的,你可以这样做 - 但鉴于你是在 Stack Overflow 而不是超级用户上询问,我假设你是在询问以编程方式进行。例如,如果您有 100 个文件,您不想全部手动完成...
  • 不,我的意思是保存为另一种编码(假设有一个编辑器可以让您选择编码)。哦,关于 SO 而不是 SU,好吧,只是我习惯了 SO。如果您认为另一个社区会更好,请随意投票支持 :-)
【解决方案2】:

可以使用iconv function(我使用LibIconv for Windows)来转换单个文件。

它允许您指定源和目标编码,并在字符无法转换时发出警告。

我尝试了几个源文件,所有重音字母都从 Cp1252 正确转换为 UTF-8。

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2012-07-30
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多