iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0

教學文裡的檔案,跟真實世界的檔案

網路上的資料處理教學,範例檔案都很乾淨:UTF-8 編碼(現在最通用的那套中文對照表,各家軟體都認得)、逗號分隔、第一列是標題、每一欄型別一致。

我工作上遇到的檔案,常常不是那樣。

這一篇分兩半。前一半整理我實際踩過的六個坑——這些都是處理檔案、用程式讀檔時遇到的。後一半做了一件新的事:把同樣的問題檔案交給 Google 的 agy(Day 20 介紹過的 Antigravity CLI),看它會不會踩進同樣的坑。

一、二十年前的編碼

老一點的公務檔案是 Big5 編碼(台灣早期電腦用的中文對照表,跟現在通用的 UTF-8 是兩套)。用現在的預設方式打開,會得到滿螢幕的亂碼。

解法是指定編碼。但真正的坑是你要先知道它是 Big5——而檔案本身不會告訴你。

進階版:Day 12 提過副檔名寫 .csv(本來應該用逗號隔開每一欄)卻用 Tab 鍵隔開的那種檔案。這裡要補的是它真正惡劣的地方——程式讀它不會報錯,只會安靜地把整列塞進第一欄。不報錯的錯誤最難發現。

二、亂碼不一定是檔案的問題

這個坑我花過冤枉時間。

有一次我打開一份 PDF,內容全是亂碼。第一反應是「編碼有問題」,於是開始找轉檔工具、試各種編碼參數。

弄了半天才發現:檔案完全正常,是我的終端機顯示不出那些字。

換一個地方打開,一切正常。

教訓:看到亂碼,先確認是「資料壞了」還是「顯示不出來」。 這兩件事的解法完全相反,搞錯方向會花掉很多時間修一個沒壞的東西。

三、舊版的 Word 檔

副檔名是 .doc 不是 .docx 的那種。

這不是「舊一點的格式」,是完全不同的檔案格式。我這次用的程式庫只支援 .docx,遇到 .doc 會直接失敗。

改副檔名沒有用——那只是改名字,內容還是舊格式。

實務上的解法是用 Word 本身把它轉成新格式,其他方法多少都會掉東西。

四、追蹤修訂會騙人

這個最陰險,因為它不會報錯,只會給你錯的答案。

公文往來常用 Word 的「追蹤修訂」功能——誰改了哪裡、加了什麼、刪了什麼,都記在檔案裡。

問題是:用我這次用的程式庫讀這種檔案,修訂中的文字讀不到。

結果是你的程式回報「這幾段是空的」,但實際打開檔案,那幾段明明有滿滿的內容——那些內容全都在修訂狀態裡。

如果你只看程式的輸出,會得到一個完全錯誤的結論。

我的處理方式:拿到公文往來的檔案,先確認有沒有追蹤修訂。有的話,先在 Word 裡「接受所有變更」另存一份,再拿去處理。

五、Excel 修復過的檔案

我最近才發現手邊有一組這樣的檔案:同一批資料,一份原始的,一份是 Excel 自動修復後另存的。

兩份的筆數不一樣。

我一度以為原始的是 404 筆、修復後的是 416 筆,差了 12 筆。

後來回頭查才發現那 12 筆根本不存在:416 是 Excel 記錄的「表格範圍」,不是資料筆數——那張工作表的範圍到第 417 列,實際有資料的只有 23 列。而且那個檔案裡有四個工作表,我只數了第一個。

這個坑的性質跟前面幾個一樣:它不會報錯。 程式老實回答了我問的問題,只是我問錯了問題。詳細的經過在 Day 8。

六、打不開的檔案

同一個資料夾裡還有一份 1.3 MB 的 .xlsx,程式讀不開,報錯說它不是有效的格式。

這份是全校的課程名單,同事依資安規定加了密碼才傳給我。

結果 AI 讀不開,給出的判斷是「大概壞了」,這篇的初稿也照著寫了。後來往檔案外殼看(經過在 Day 8),裡面是一個加密的容器,不是壞掉的試算表——它沒壞,密碼在做它該做的事。

錯誤訊息只說「格式不對」,不會告訴你「這是加密的」。同一句錯誤,可能是壞了,也可能是被保護著,而兩者的處理方式完全相反:壞了要找備份或重做;加密的檔案是完整的,該問的是「程式本來就該讀得到它嗎」。這份檔案依規定加了密,我就照規定不交給程式或 AI 處理——就算裡面的課名、授課老師多半本來就查得到(Day 27 談過公開資訊怎麼判斷),有規定的時候先照規定。這次的保護是有效的;出錯的是讀不開之後的那個猜測。

示意圖:三個不會報錯的檔案坑。一、同一個 csv 數行數得 647、用 csv 解析得 404,差 243 筆;二、加密的 xlsx 讀取時只報 BadZipFile;三、PDF 文字正常但終端機顯示成亂碼

同樣的檔案,交給 agy 會怎樣

上面六個坑,都不是 agy 遇到的。所以我想知道:如果一開始就交給它,它分得出來嗎?

真實檔案不能拿來測——那份追蹤修訂的檔案是還沒定案的內部草案,課程名單依資安規定加了密碼,照規矩都不能交出去。所以我請幫我整理稿子的那個 AI(不是 agy)寫了一支小程式,用假資料做了四個「問題檔案」,內容全是編的,但毛病跟真的一樣:

  • 一份帶追蹤修訂的 Word 檔:第 2、4 段整段都在「修訂」狀態。用一般的程式庫讀,這兩段會被讀成空白——跟真檔一模一樣
  • 一份 Big5 編碼的 csv
  • 一份副檔名是 .csv、其實用 Tab 隔開的檔案
  • 一份設了密碼的 Excel 檔:用程式讀,報的是跟真檔一樣的「不是有效格式」

然後照平常交工作的方式交給 agy(版本 1.2.16),請它逐一讀、回報內容、指出有沒有異常。

第一次,它什麼都沒讀到。 它第一步想執行一個列出檔案的指令,被權限擋了下來,11 秒就結束了。這跟 Day 21 講過的是同一件事:預設權限下,要執行指令的動作會被擋,而且第一個被擋的動作就讓整個任務停下來。我在交代時加一句「只能用讀檔工具」,才跑得下去。

坑:我出的題目,自己先洩題了

第二次它跑完了,報告看起來幾乎全對:這份是 Big5、這份有修訂、這份加了密碼。

仔細一看,它寫的是「從檔名推測可能是 Big5」「從檔名 locked 推測有加密」。我把檔案取名叫 big5.csv、locked.xlsx——答案寫在題目上了。

所以我把四個檔案改名成 A、B、C、D,內容不動,再測一次。這次的結果才算數:

檔案 agy 的表現
Tab 隔開的 csv 認出來了:讀到內容,指出副檔名寫 .csv 但實際用 Tab 分隔
Big5 的 csv 讀不到,沒認出是 Big5,自己猜是其他原因
設了密碼的 Excel 讀不到,判斷是「二進位檔」,沒認出是加密;但也沒說它壞了
追蹤修訂的 Word 檔 讀不到——它的讀檔工具回報「不支援這種壓縮格式」(.docx 本質上是一個壓縮檔)

如果我沒注意到第二次的報告是從檔名猜的,這篇就會寫成「agy 四個坑全部認得出來」。測 AI 的時候,題目本身也要先過一遍:答案有沒有寫在題目上。

這次的結果能說到哪裡

  • 只測了一次、一個版本、一組假檔、一種交代方式。不能說「agy 就是認不出 Big5」,只能說這次沒認出來。
  • 四題裡有三題它讀不到,但讀不到的時候,它有照實說讀不到。對照上面第四個坑:一般程式庫遇到同一份追蹤修訂檔,是安靜地把兩段讀成空白,不會告訴你少了什麼。明說「讀不到」比安靜讀錯好處理——但讀不到不等於處理對了,那三個檔案的內容它一個字都沒交出來。
  • 還有一件跟檔案格式無關、但一樣要驗的事:我請它把報告寫在指定的資料夾,它兩次都寫到了別的資料夾,第二次還回報「已順利產出於您指定的資料夾中」。結果寫到哪裡,也要自己去看。

所以我養成的習慣

一、拿到檔案先看一眼基本資訊:有幾列、有哪些欄位、編碼是什麼。花三十秒,可以省掉後面很多困惑。

二、程式回報「空的」的時候,自己打開檔案確認一次。追蹤修訂那個坑就是這樣發現的。

三、同一批資料有兩個版本的時候,先搞清楚差在哪,再決定用哪個。不要兩個都用。

四、打不開的檔案,先查它是壞了還是被保護著。錯誤訊息不會替你分辨,而我第一次就猜錯了。(2026-10-11 更正:第一次猜「壞了」的是幫我讀檔的 AI,初稿照著寫了,見〈六〉。)

五、拿檔案測 AI 之前,先把檔名換成看不出答案的名字。不然你測到的是它會不會讀檔名。

AI 在這裡幫得上什麼

幫得上的:處理編碼、猜分隔符號、整理多層表頭、批次轉檔。這些都是「有標準做法、結果可以驗證」的工作。

幫不上的,分兩種。

第一種是安靜讀錯:追蹤修訂那個坑就是典型,程式讀了、回報「這幾段是空的」。它沒有說謊,它看到的就是空的,但答案是錯的。

第二種是讀不到:這次 agy 遇到 Big5、加密檔、Word 檔都是這樣。它有說讀不到;原因有的講得出來(Word 檔),有的講不準——Big5 它猜成別的原因,加密檔只判成「二進位檔」。

兩種都沒辦法靠追問它來解決,只能靠你自己打開檔案看一眼——至少,第二種它會先告訴你該去看了。

明天

Day 29:什麼該交給 AI,什麼絕對不該——三十天下來的總結。


上一篇
Day 27:哪些資料不能送出去
系列文
用 Google AI 簡化行政工作流程:一個學校行政人員的 30 天實作紀錄 共 28 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言