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;
        }

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章