Java Swing:未显示扩展ASCII字符
我试图在JTextPanel中显示ASCII字符,但对于一些扩展字符(如ASCII 217、ASCII 180和ASCII表中未找到的向上箭头)无效 我从文件系统中读取一个带有ASCII字符的文件,现在假设我的问题是显示文件内容。对于上面的字符,将显示一个空格。 我已经尝试了Java Swing:未显示扩展ASCII字符,java,swing,encoding,ascii,Java,Swing,Encoding,Ascii,我试图在JTextPanel中显示ASCII字符,但对于一些扩展字符(如ASCII 217、ASCII 180和ASCII表中未找到的向上箭头)无效 我从文件系统中读取一个带有ASCII字符的文件,现在假设我的问题是显示文件内容。对于上面的字符,将显示一个空格。 我已经尝试了Charset.availableCharsets()中的所有可用字符集,以及几种字体 public static void main(String[] args) throws IOException {
Charset.availableCharsets()
中的所有可用字符集,以及几种字体
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame();
frame.setTitle("test");
frame.setBounds(100, 100, 900, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Container contentPane = frame.getContentPane();
JTextPane panel = new JTextPane();
contentPane.add(panel);
JFileChooser fileChooser = new JFileChooser();
if ( fileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION ) {
File selectedFile = fileChooser.getSelectedFile();
InputStream in = new FileInputStream(selectedFile);
InputStreamReader reader = new InputStreamReader(in, StandardCharsets.ISO_8859_1);
BufferedReader buffer = new BufferedReader(reader);
String s = null;
if ((s = buffer.readLine()) != null) {
panel.setText(s);
}
}
}
请参阅we.tl/t-4hf9pgcsEZ(带https)下载测试文件
以下是该文件的内容:
À¹ëÉÃN§T´jtkDÄ´†ê]":2q'6u$Q!44à!
®
当我通过“编辑问题窗口”中的内容时,我清楚地看到了字符,但当我保存编辑时,许多字符消失了。。。也许是我面临的问题的线索
使用联机工具以六边形转换的文件:
0xC0, 0xB9, 0xEB, 0xC9, 0xC3, 0x04, 0x4E, 0xA7, 0x54, 0xB4, 0x6A, 0x74, 0x6B, 0x44, 0xC4, 0x18,
0xB4, 0x17, 0x86, 0xEA, 0x5D, 0x22, 0x3A, 0x32, 0x17, 0x12, 0x13, 0x71, 0x27, 0x11, 0x36, 0x75,
0x24, 0x51, 0x21, 0x34, 0x34, 0x10, 0x14, 0xE0, 0x21, 0x02, 0x0E, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
0x0F, 0x0F, 0x00, 0x00, 0xAE,
什么是“扩展ASCII”?无论如何,Java字符串是Unicode。您从输入中读取大约8859-1字节,并将其转换为Unicode,然后将Unicode字符串发送到JTextPane。从你的描述来看,似乎你不是在谈论实际的8859-1个字符,据我所知,这些字符没有向上箭头。因此,可能使用了(不可显示的)替换字符。因此,您的第一个任务是发现文件中使用的实际编码。它不是ASCII码。不是8859-1。这不是一个实际的东西(没有美国标准),它是一个松散的名称,用于在前128个代码点中大量与ASCII相同的字符集。您可能有吗?使用
JTextPane.read(InputStream)
而不是上面看到的代码(AFAIU)只显示最后一行读取。一般提示:为了更快地获得更好的帮助,请添加或。硬编码数据以替换文本文件,或热链接到文本文件(将其放到网上并直接从URL加载)。顺便说一句,panel
对于JTextPane
来说是一个容易混淆的名称。称之为textPane
或更能说明底层组件的东西。谢谢@other dave,但我如何才能做到这一点?我已经尝试使用Charset.availableCharsets()
和记事本++来查找文件编码,但目前没有解决方案……:'(显示的字符是unicode字符,请参见