您遇到的問題:
- ✅ 下載 CSV 功能正常
- ❌ 網頁無法顯示數據
- 🤔 懷疑是中文欄位的問題
您的懷疑是對的! 問題確實出在中文欄位名稱上。
date, 空中, 聯合演訓, 艦通過, 航母活動,
與那國, 宮古, 大禹, 對馬,
進, 出, 艦型, 備考,
pla_aircraft_sorties, plan_vessel_sorties, remark
舊版 JavaScript 使用的欄位名稱:
// ❌ 錯誤 - 這些欄位在 CSV 中不存在
row['與那國'] // 實際存在 ✅
row['宮古'] // 實際存在 ✅
row['大禹'] // 實際存在 ✅
row['對馬'] // 實際存在 ✅但問題在於 UTF-8 BOM (Byte Order Mark) 和編碼處理!
問題: CSV 文件開頭有一個不可見的 BOM 字符 \uFEFF
解決方案:
// ✅ 移除 BOM
const cleanText = text.replace(/^\uFEFF/, '');問題: 中文欄位可能有空值或 "FALSE" 字符串
解決方案:
// ✅ 檢查值是否真正存在
const hasValue = (val) => val && val !== '' && val !== 'FALSE' && val !== '0';
// 使用方法
${hasValue(row['與那國']) ? '✅' : '-'}解決方案:
Papa.parse(cleanText, {
header: true,
skipEmptyLines: true,
encoding: 'UTF-8' // ✅ 明確指定 UTF-8 編碼
});我已經創建了以下文件:
包含所有修復:
- ✅ UTF-8 BOM 處理
- ✅ 正確的中文欄位訪問
- ✅ 調試日誌(在瀏覽器控制台可見)
- ✅ 雙標籤頁設計
用於檢查 CSV 是否正確載入:
- 顯示所有欄位名稱
- 顯示前 5 筆數據
- 測試中文欄位訪問
- 顯示詳細錯誤信息
-
在項目文件夾中,用
index_fixed.html替換index.html:# Windows copy index_fixed.html index.html # Mac/Linux cp index_fixed.html index.html
-
上傳到 GitHub(如果已部署)
-
打開
test.html在本地瀏覽器中- 如果看到 ✅ 成功訊息 → 數據讀取正常
- 如果看到 ❌ 錯誤訊息 → 查看具體錯誤
-
確認測試通過後,再使用
index_fixed.html
cd C:\path\to\pla-data-dashboard
python -m http.server 8000然後打開瀏覽器訪問:
cd /path/to/pla-data-dashboard
python3 -m http.server 8000- 打開瀏覽器的開發者工具(按
F12) - 切換到
Console標籤 - 刷新頁面
- 查看日誌輸出:
Data loaded successfully Comprehensive: 2462 records Strait: 1356 records Strait columns: ["date", "空中", "聯合演訓", ...]
- 打開網頁,統計卡片顯示數字(不是
-) - 看到兩個標籤頁:📊 Comprehensive 和 🚢 Strait Transit
- 點擊 Comprehensive 標籤,看到數據表格
- 點擊 Strait Transit 標籤,看到海峽數據
- 表格中有 ✅ 符號(表示事件發生)
- 可以看到中文內容(艦型、備考欄位)
- 下載功能正常
打開瀏覽器控制台(F12),查看是否有錯誤信息:
Access to fetch at 'file:///...' has been blocked by CORS policy
解決: 必須使用本地服務器(見上面的測試方法)
Failed to fetch data/JapanandBattleship.csv
解決: 確認 data/ 文件夾在正確位置,且包含兩個 CSV 文件
SyntaxError: Unexpected token in JSON
解決: CSV 文件可能損壞,重新複製原始文件
確保文件夾結構正確:
pla-data-dashboard/
├── index.html ← 使用 index_fixed.html 的內容
├── test.html ← 測試診斷頁面
├── data/ ← 必須有這個文件夾!
│ ├── JapanandBattleship.csv
│ └── merged_comprehensive_data_clean.csv
├── README.md
└── 其他文件...
-
下載新文件:
index_fixed.html(主網頁)test.html(測試頁面)
-
替換舊文件:
# 備份舊版 mv index.html index_old.html # 使用新版 cp index_fixed.html index.html
-
本地測試:
python -m http.server 8000 # 打開 http://localhost:8000 -
確認成功後上傳到 GitHub:
git add index.html test.html git commit -m "Fix: 修復中文欄位顯示問題" git push
UTF-8 BOM 是一個特殊標記(\uFEFF),某些編輯器(如 Excel)在保存 UTF-8 文件時會自動添加。它對人眼不可見,但會影響程序解析。
// ✅ 正確方式 1:使用方括號
row['與那國']
// ✅ 正確方式 2:使用變量
const colName = '與那國';
row[colName]
// ❌ 錯誤方式:點符號(不支持中文)
row.與那國 // 這樣不行!Papa.parse(text, {
header: true, // 第一行是標題
skipEmptyLines: true, // 跳過空行
encoding: 'UTF-8' // 指定編碼
});-
運行 test.html
- 查看是否能正確讀取欄位名稱
- 檢查是否有錯誤訊息
-
檢查瀏覽器控制台
- 按 F12 打開開發者工具
- 查看 Console 標籤的錯誤
-
確認文件編碼
- 使用記事本++或 VS Code 打開 CSV
- 檢查是否為 UTF-8 編碼
-
截圖錯誤信息
- 控制台的紅色錯誤訊息
- test.html 顯示的錯誤
- 提交到 GitHub Issues
當您看到以下內容,表示修復成功:
✅ 統計卡片顯示數字
✅ 圖表正常繪製
✅ 兩個標籤頁可以點擊切換
✅ Comprehensive 表格顯示 9 個欄位
✅ Strait Transit 表格顯示 10 個欄位
✅ 表格中有 ✅ 符號
✅ 可以看到中文內容
✅ 測試 1: 讀取 JapanandBattleship.csv
✅ 成功讀取 1356 筆記錄
✅ 成功訪問「與那國」欄位
✅ 測試 2: 讀取 merged_comprehensive_data_clean.csv
✅ 成功讀取 2462 筆記錄
問題原因:
- CSV 文件有 UTF-8 BOM
- 中文欄位需要特殊處理
- 空值判斷不正確
修復方案:
- ✅ 移除 BOM 字符
- ✅ 正確訪問中文欄位
- ✅ 改進空值檢查
- ✅ 添加調試日誌
使用新版本:
- 用
index_fixed.html替換index.html - 使用
test.html進行診斷 - 本地測試後上傳到 GitHub
現在您的網頁應該可以正常顯示中文數據了! 🚀
文檔版本: 2.1
更新日期: 2025年1月2日
問題修復: UTF-8 BOM + 中文欄位訪問