PDF转txt之后特殊字符的处理

最近将一个PDF文档转换成txt之后,想放在讯飞有声里听,听的时候发现,有些奇诡。

转换完的效果如下:

存在问题:1. 字符中的方框问题,读的时候磕磕绊绊,如同结巴。

2.多余的换行符问题,导致讯飞读的时候,存在过多的断句,听起来别扭。 

上述方框在pdf里显示的时候不存在。

换行符用代码写一下,处理一下就好。

这个方框 本来以为通过查找替换掉就可以了,后来发现这个方框很神奇。

将第一个方框复制粘贴到一个新的txt里,结果发现是这个样子的

第二个“不”就是 原文中的 方框

每个方框都是奇怪的字符,看上去是汉字,实际上与常规的汉字看起来又有点不同。

查询了一大堆资料,参考如下帖子

https://sspai.com/post/52073

大体原因是编码的问题,应该就是将编码转换成了多余的字符了,而这些字符,都不是常规的汉字字符。

通过下述网址,可以查看这些奇怪字符的编码。

http://www.mytju.com/classcode/tools/encode_utf8.asp

比如:

 上述是两个看上去一样,又有点不同的字符的编码。分别是  “⽬”和  “目”,第一个是方框表示的字符,编码是2F6C,第二个是常规输入法打出的字,编码是76EE

知道了问题,接下来就是想办法把这些特殊字符移除掉。

参考如下资料

https://www.cnblogs.com/straybirds/p/6392306.html

https://blog.csdn.net/victoryckl/article/details/91536878

上面列出了常见的unicode字符编码的范围,将方框中的unicode所代表的字符类型范围内进行排除即可。比如,2F6C代表的是康熙字典部首

在代码中将2F00-2FD5范围内字符移除即可。

核心代码:

/// <summary>
        /// 康熙部首范围
        /// </summary>
        static int[] kangxibushou = new int[] { 0x2F00, 0x2FDF };

        /// <summary>
        /// cjk部首范围
        /// </summary>
        static int[] cjkbushou = new int[] { 0x2E80, 0x2EFF };

        /// <summary>
        /// cjk扩展部首
        /// </summary>
        static int[] cjkbushou_ext = new int[] { 0x2E80, 0x2EFF };

        /// <summary>
        /// 彝文部首范围
        /// </summary>
        static int[] yiwenbushou = new int[] { 0xA490 , 0xA4CF};

        //static int[] bzzf = new int[] { 0x4E00, 0x9FCB};

        //兼容汉字
        static int[] jrhz = new int[] { 0xF900, 0xFAD9 };

        static string solveLine(string line)
        {
            Console.WriteLine("处理: "+line);
            for(int i = line.Length-1; i >=0; i--)
            {
                char c = line[i];
                Console.WriteLine("正在处理:{0}", c);
                if (isInnerOfBushou(c, kangxibushou) || isInnerOfBushou(c, cjkbushou) ||
                    isInnerOfBushou(c, cjkbushou_ext) || isInnerOfBushou(c, yiwenbushou) ||
                    isInnerOfBushou(c,jrhz))
                {
                    line = line.Remove(i, 1);
                }
            }
            Console.WriteLine("处理结果:  "+line);
            return line;
        }
发布了22 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u012839776/article/details/103057174