java 读取rtf字节_JAVA读取RTF文档
RTF,全称是“富文本格式“,它便于在应用程序之间轻松的转换文本和图形。想了解RTF文件基本格式及相关可以点击这里。
需要注意的是,在RTF文件中,对于占双字节的中文,都是用单字节的ASCII字符表示,例如文本“宋体ABC”应该表示为:\'cb\'ce\'cc\'e5ABC,
这种编码我们称之为“汉字机内码”,简称“内码”。把国标码的汉字代码中的区码与位码分别换算为16进制数,然后再分别加上十六进制数80,
即为该汉字的机内码。由于内码的编码方式,所以我们最好在读取RTF文件流的时候将两个字节合并成单个16进制字符,然后在write的时候
将其转换成unicode编码,才能显示成中文字符。
以下有示例代码仅供参考:
(注意:这里只解析中文字符,对于单字节字符由于不是内码方式编码,所以是读取不到的)
package jj.RTF;
/**
* 解析RTF文件
* @author jj
*
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
public class TestParseRTF {
private static String filePath = "E:/testRTF.rtf";
private static List buffer;
public static void main(String[] args) throws Exception {
readFile();
parseRTF();
//printIns();
}
/**
* 将内码转成16进制编码
* @throws IOException
*/
public static void readFile() throws IOException {
InputStream in = new FileInputStream(new File(filePath));
int ch;
buffer = new ArrayList();
while((ch=in.read()) > 0) {
if (ch == '\\') {
ch = in.read();
}//这种形式的都是双字节字符
if (ch == '\''){
char ch1 = (char) in.read();
char ch2 = (char) in.read();
// ']'或'^'
if (ch1 == '9' && (ch2 == '3' || ch2 == '4')) {
}
//将两个十进制的数,合并转变成16进制
/**98--11
* 99--12
* 合成11*16+12=188
*/
ch = Character.digit(ch1,16)*16 + Character.digit(ch2,16);
buffer.add((char) ch);
}
}
}
/**
* 将16进制编码字符转成unicode编码的字符,并显示成中文字符串
* @throws UnsupportedEncodingException
*/
public static void parseRTF() throws UnsupportedEncodingException {
byte[]byteArr = new byte[buffer.size()];
for(int i = 0;i < buffer.size();i++) {
char ch = buffer.get(i);
if (ch < 0x80) {
byteArr[i] = (byte)ch;
} else if (ch < '\u00FF') {
char a = toHex(ch / 16);
char b = toHex(ch % 16);
String t = "" + a + b;
int hb = Integer.parseInt(t, 16);
byteArr[i] = (byte)hb;
}
}
System.out.println(new String(byteArr));
}
public static char toHex(int ch) {
if (ch < 10) {
return (char) ('0' + ch);
} else {
return (char) ('a' + ch - 10);
}
}
// 16进制字符转成中文字符
public static String hexToStringGBK(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i < baKeyword.length; i++) {
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
try {
s = new String(baKeyword, "GBK");// UTF-16le:Not
} catch (Exception e1) {
e1.printStackTrace();
return "";
}
return s;
}//查看RTF文件原始编码字符
public static void printIns() throws IOException {
InputStream in = new FileInputStream(new File(filePath));
int ch;
while((ch=in.read()) > 0) {
System.out.print((char)ch);
}
}
}
程序运行结果:
宋体宋体}¨·ˇˉā薄谩ⅰ!ā怠贰埂弧俊场剑。ⅲВ海唬浚荩啵閧·‘“〈《「『【〔〖(.[{£¥这是一首简单的小情歌
(注:“这是一首简单的小情歌”是rtf文本内容) 推荐这里的文件流使用PushbackInputStream,即回退输入流(虽然我没用。。),这种流允许程序可以读取到特定字符。
想了解可点击回退输入流
至于完成一个RTF解析器,还是挺复杂的。
java 读取rtf字节_JAVA读取RTF文档相关推荐
- java doc转图片_Java 将word文档转换为PNG、XPS、RTF等格式
在日常办公中,Word是一种很好的文档排版工具.在Word创建好文档后, 我们常常需要将其保存为PDF.图片或其他格式.本文就将通过使用Java程序来演示如何将Word文档转换为PNG.XPS.RTF ...
- java合并excel文件_Java 合并Excel文档
在日常使用Excel软件办公时,通常会产生很多文档.当我们需对其中的数据进行整理和统计时,对文档进行合并处理将能够大大提高操作效率.一般文档合并可分为两种情况:一是将同一个Excel文档内多张工作表的 ...
- java word添加图片_Java 替换word文档文字并指定位置插入图片
先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...
- java word 颜色设置_Java 给Word文档添加背景颜色
前言 当我们制作好Word文档后,想要让枯燥乏味的文本显得有活力,或是想高亮显示文档中指定的段落或文字,此时我们可以通过为整个文档或某特定文字/段落添加背景色的形式来实现.本文将使用Free Spir ...
- java生成world文件_Java导出World文档(入门)
第一步就是将World文档里面需要从数据库填充的部分用占位符替换 第二步:就是将此文档保存为Xml格式 第三步:将其放在resource目录下,并选中此文件,右键点击properties属性,将其编码 ...
- java 生成纯色图片_Java 给PDF文档设置背景色(纯色、背景图片)
import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase; import java.awt.*; public class ...
- java 加背景颜色_Java 给Word文档添加背景颜色
前言 当我们制作好Word文档后,想要让枯燥乏味的文本显得有活力,或是想高亮显示文档中指定的段落或文字,此时我们可以通过为整个文档或某特定文字/段落添加背景色的形式来实现.本文将使用Free Spir ...
- java word替换图片_Java 替换word文档文字并指定位置插入图片
先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...
- java操作office和pdf文件java读取word,excel和pdf文档内容
在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...
- java word文档生成_java生成word文档
java生成word文档有多种方式: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...
最新文章
- 【古法炮制】最原始的解决JAVA接口跨域的问题
- 测试ATS对某个特定域名下文件处理效果的方法
- Linux下HOOK动态链接库中API的方法
- 【Codeforces】 2A - Winner (map)
- 周立功-成功心法(2):通过讲故事营销自己
- kubernetes相关概念
- 曾鸣:未来十年,将确定智能商业的格局|干货
- Go 函数的 Map 型参数,会发生扩容后指向不同底层内存的事儿吗?
- 【每日算法Day 79】所有人都会做的入门题,但是能看出你的代码能力!
- 【mud】xyj450里的toy下的buwawa脚本问题
- 抖音上超火系列的透明头像是怎么弄的?操作原来如此简单
- 第二十天: Linux文件管理+Linux备份压缩+网络与磁盘管理+shell与安装
- ASP.NET和ASP的区别?
- rs232串口通讯模块 - Delphi编程
- 转专业计算机的面试自我介绍,转专业面试自我介绍
- C51单片机实验——LCD 1602液晶显示器
- App ID注册地址
- C语言生成BMP文件
- springboot幼儿园书刊信息管理系统毕业设计源码141858
- 4路编码器脉冲计数器,转速测量,8路DO,Modbus TCP数据采集模块