我有一个rtf文件,其中有一些带有项目符号的文本,如下面的屏幕截图所示
我想提取数据和子弹,但是当我在控制台中打印时,我得到了垃圾值.如何从控制台打印完全相同的内容.我尝试的方式如下
public static void main(String[] args) throws IOException, BadLocationException {
RTFEditorKit rtf = new RTFEditorKit();
Document doc = rtf.createDefaultDocument();
FileInputStream fis = new FileInputStream("C:\\Users\\Guest\\Desktop\\abc.rtf");
InputStreamReader i =new InputStreamReader(fis,"UTF-8");
rtf.read(i,doc,0);
System.out.println(doc.getText(0,doc.getLength()));
}
Run Code Online (Sandbox Code Playgroud)
控制台输出:
我认为垃圾值是由于控制台不支持chareset所以我试图生成一个pdf文件,但在pdf中我也得到相同的垃圾值.这是pdf代码
Paragraph de=new Paragraph();
Phrase pde=new Phrase();
pde.add(new Chunk(getText("C:\\Users\\Guest\\Desktop\\abc.rtf"),smallNormal_11));
de.add(pde);
de.getFont().setStyle(BaseFont.IDENTITY_H);
document.add(de);
public static String getText() throws IOException, BadLocationException {
RTFEditorKit rtf = new RTFEditorKit();
Document doc = rtf.createDefaultDocument();
FileInputStream fis = new FileInputStream("C:\\Users\\Guest\\Desktop\\abc.rtf");
InputStreamReader i =new InputStreamReader(fis,"UTF-8");
rtf.read(i,doc,0);
String output=doc.getText(0,doc.getLength());
return output;
}
Run Code Online (Sandbox Code Playgroud)
尽管你说了,我的猜测是它是一个控制台编码问题.
无论如何你可以轻松检查它:
只需替换此行:
System.out.println(doc.getText(0,doc.getLength()));
Run Code Online (Sandbox Code Playgroud)
有了这两行:
PrintStream ps = new PrintStream(System.out, true, "UTF-8");
ps.println(doc.getText(0,doc.getLength()));
Run Code Online (Sandbox Code Playgroud)
这将强制控制台编码为UTF-8.
如果仍然是错误的,我会怀疑你的文件不完全符合rtf标准.
我做了一些测试,你的代码运行良好(控制台一个,我没有尝试pdf)在Linux下,但控制台本身是UTF-8.
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |