【问题标题】:Issue with encoding UTF-8 when FTPing filesFTP 文件时编码 UTF-8 的问题
【发布时间】:2010-12-11 09:44:00
【问题描述】:

我可以让我的应用程序使用 FTPClient Java 库通过 FTP 上传文件。

(我恰好正在上传到 Oracle XML DB 存储库。)

除非 xml 文件中包含花引号,否则一切都可以正常上传。在这种情况下,我收到错误: LPX-00200:无法从编码 UTF-8 转换为 UCS2

我可以使用 Windows CMD line FTP 工具上传我认为相同的文件。我想知道是否有一些 Windows CMD 行工具使用的编码设置,也许我需要在我的 Java 代码中设置。

有人知道这件事吗?谢谢!!

【问题讨论】:

  • 你是在二进制模式上传吗?
  • 我不认为我在以二进制模式上传。
  • 听起来“弯引号”字符可能超出了正常的 ASCII(或 ISO 8859-1)范围,因此它们无法转换为单字节代码。

标签: java ftp ftp-client oracle-xml-db-repository


【解决方案1】:

我不知道该应用程序,但您可以尝试在 JVM 命令行上使用 -Dfile.encoding=UTF-8

【讨论】:

    【解决方案2】:

    不熟悉 Oracle XML DB 存储库——它们可以接受压缩上传吗?对文件进行压缩或 gzip 压缩会节省资源并阻碍正在使用的任何 ASCII 文件类型自动检测。

    【讨论】:

    • 文件必须以xml形式进入,不能是二进制的。
    【解决方案3】:

    在二进制中这个问题消失了。

    FTPClient.setType(FTPClient.TYPE_BINARY);
    

    http://www.sauronsoftware.it/projects/ftp4j/manual.php#3

    【讨论】:

      【解决方案4】:

      如果您的文件包含花引号,则它们在 iso-8859-1 和 windows-1252 字符集中的高位集范围内。在 UTF-8 中,这些字符在 UTF-8 中通常占用两个字节。

      您很可能不小心将 xml 文件编码为其中一种编码而不是 UTF-8。这将导致转换错误,因为设置的高位仅允许在多个 UTF-8 八位字节的序列中。

      如果您使用的是 Windows,请在记事本中打开文件并尝试使用另存为...以 UTF-8 编码重新保存文档,然后上传更改的文件。在 Unix 中,使用 iconv 或类似的上传前从 iso-8859-1 转换为 UTF-8 的工具。

      如果 XML 文档明确标记了其编码,请确保使用正确的编码进行标记(例如 UTF-8)。在许多 xml 解析器中,您可以解析 iso-8859-1 或 windows-1252 字符集编码的 XML,只要它被标记为这样。

      【讨论】:

        猜你喜欢
        • 2010-12-01
        • 1970-01-01
        • 2011-05-23
        • 2017-07-15
        • 2019-02-25
        • 1970-01-01
        相关资源
        最近更新 更多