gpt4 book ai didi

java - FTP 服务器输出和重音

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:41:31 24 4
gpt4 key购买 nike

我编写了这个小测试类来连接到 FTP 服务器。

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class FTPTest {

public static void main(String[] args) {
URL url = null;

try {
url = new URL("ftp://anonymous:Password@127.0.0.1");
} catch (MalformedURLException e) {
e.printStackTrace();
}

URLConnection conn = null;

try {
conn = url.openConnection();
} catch (IOException e) {
e.printStackTrace();
}

InputStream in = null;

try {
in = conn.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}

BufferedInputStream bin = new BufferedInputStream(in);
int b;

try {
while ((b = bin.read()) != -1) {
char c = (char) b;
System.out.print("" + (char) b);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

这是输出:

-rw-r--r-- 1 ftp ftp           4700 Apr 30  2007 premier.java
-rw-r--r-- 1 ftp ftp 88576 Oct 23 2007 Serie1_1.doc
-rw-r--r-- 1 ftp ftp 1401 Nov 21 2006 tp20061121.txt
drwxr-xr-x 1 ftp ftp 0 Apr 23 20:04 répertoire

注意列表末尾的目录名称。应该有一个“é”(带重音符的 e)而不是双字符“É”。

这让我想起了之前在 JSF 中遇到的一个问题,即标准之间存在混淆。我对字符编码的经验很少,所以我不确定发生了什么。我假设服务器输出是 ASCII 格式,那么如何调整输出以使其在控制台中正确显示?

最佳答案

你正在使用

将输入流中的 byte 强制转换为 char
char c = (char) b;

这绝对不是 Good Housekeeping 批准的表格。

Stream 传送 byte,而您需要 charReader 传送 char 并将以自动和受控的方式为您进行字符集转换。

您应该在 InputStream 周围包装一个 InputStreamReaderInputStreamReader 的构造函数允许您指定一个 CharSet,这将让您控制翻译。

InputStreamReader 读取当然会产生“真实的”char。另一个好处是您可以将 BufferedReader 包裹在 InputStreamReader 中,然后使用 一次读取整行(到 String 中)读行


编辑:为了说明我所说的“环绕”的意思,这里有一些(未经测试的!)代码来说明这个想法:

BufferedReader br = new BufferedReader(new InputStreamReader(bin, "US-ASCII"));
...
String line = br.readLine();

关于java - FTP 服务器输出和重音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2701151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com