Skip to content

Latest commit

 

History

History
349 lines (253 loc) · 7.6 KB

File metadata and controls

349 lines (253 loc) · 7.6 KB

🔧 中文欄位顯示問題 - 完整修復指南

❌ 問題描述

您遇到的問題:

  • ✅ 下載 CSV 功能正常
  • ❌ 網頁無法顯示數據
  • 🤔 懷疑是中文欄位的問題

您的懷疑是對的! 問題確實出在中文欄位名稱上。


🔍 問題根源

JapanandBattleship.csv 的實際欄位名稱

date, 空中, 聯合演訓, 艦通過, 航母活動, 
與那國, 宮古, 大禹, 對馬, 
進, 出, 艦型, 備考, 
pla_aircraft_sorties, plan_vessel_sorties, remark

舊版代碼的錯誤

舊版 JavaScript 使用的欄位名稱:

// ❌ 錯誤 - 這些欄位在 CSV 中不存在
row['與那國']  // 實際存在 ✅
row['宮古']    // 實際存在 ✅
row['大禹']    // 實際存在 ✅
row['對馬']    // 實際存在 ✅

但問題在於 UTF-8 BOM (Byte Order Mark) 和編碼處理!


✅ 已修復的問題

修復 1: UTF-8 BOM 處理

問題: CSV 文件開頭有一個不可見的 BOM 字符 \uFEFF

解決方案:

// ✅ 移除 BOM
const cleanText = text.replace(/^\uFEFF/, '');

修復 2: 正確的欄位訪問

問題: 中文欄位可能有空值或 "FALSE" 字符串

解決方案:

// ✅ 檢查值是否真正存在
const hasValue = (val) => val && val !== '' && val !== 'FALSE' && val !== '0';

// 使用方法
${hasValue(row['與那國']) ? '✅' : '-'}

修復 3: 添加編碼聲明

解決方案:

Papa.parse(cleanText, {
    header: true,
    skipEmptyLines: true,
    encoding: 'UTF-8'  // ✅ 明確指定 UTF-8 編碼
});

📦 修復後的文件

我已經創建了以下文件:

1. index_fixed.html - 完全修復版

包含所有修復:

  • ✅ UTF-8 BOM 處理
  • ✅ 正確的中文欄位訪問
  • ✅ 調試日誌(在瀏覽器控制台可見)
  • ✅ 雙標籤頁設計

2. test.html - 測試診斷頁面

用於檢查 CSV 是否正確載入:

  • 顯示所有欄位名稱
  • 顯示前 5 筆數據
  • 測試中文欄位訪問
  • 顯示詳細錯誤信息

🚀 使用新版本的步驟

方法 A:使用修復版(推薦)

  1. 在項目文件夾中,用 index_fixed.html 替換 index.html

    # Windows
    copy index_fixed.html index.html
    
    # Mac/Linux
    cp index_fixed.html index.html
  2. 上傳到 GitHub(如果已部署)

方法 B:先測試診斷

  1. 打開 test.html 在本地瀏覽器中

    • 如果看到 ✅ 成功訊息 → 數據讀取正常
    • 如果看到 ❌ 錯誤訊息 → 查看具體錯誤
  2. 確認測試通過後,再使用 index_fixed.html


🧪 本地測試方法

Windows (使用 Python)

cd C:\path\to\pla-data-dashboard
python -m http.server 8000

然後打開瀏覽器訪問:

Mac/Linux

cd /path/to/pla-data-dashboard
python3 -m http.server 8000

查看調試信息

  1. 打開瀏覽器的開發者工具(按 F12
  2. 切換到 Console 標籤
  3. 刷新頁面
  4. 查看日誌輸出:
    Data loaded successfully
    Comprehensive: 2462 records
    Strait: 1356 records
    Strait columns: ["date", "空中", "聯合演訓", ...]
    

🔍 驗證修復是否成功

檢查清單

  • 打開網頁,統計卡片顯示數字(不是 -
  • 看到兩個標籤頁:📊 Comprehensive 和 🚢 Strait Transit
  • 點擊 Comprehensive 標籤,看到數據表格
  • 點擊 Strait Transit 標籤,看到海峽數據
  • 表格中有 ✅ 符號(表示事件發生)
  • 可以看到中文內容(艦型、備考欄位)
  • 下載功能正常

如果還是無法顯示

打開瀏覽器控制台(F12),查看是否有錯誤信息:

常見錯誤 1: CORS 錯誤

Access to fetch at 'file:///...' has been blocked by CORS policy

解決: 必須使用本地服務器(見上面的測試方法)

常見錯誤 2: 文件未找到

Failed to fetch data/JapanandBattleship.csv

解決: 確認 data/ 文件夾在正確位置,且包含兩個 CSV 文件

常見錯誤 3: 編碼問題

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
└── 其他文件...

🎯 快速修復步驟

如果您正在使用舊版網頁

  1. 下載新文件:

    • index_fixed.html (主網頁)
    • test.html (測試頁面)
  2. 替換舊文件:

    # 備份舊版
    mv index.html index_old.html
    
    # 使用新版
    cp index_fixed.html index.html
  3. 本地測試:

    python -m http.server 8000
    # 打開 http://localhost:8000
  4. 確認成功後上傳到 GitHub:

    git add index.html test.html
    git commit -m "Fix: 修復中文欄位顯示問題"
    git push

💡 技術細節說明

為什麼會有 BOM?

UTF-8 BOM 是一個特殊標記(\uFEFF),某些編輯器(如 Excel)在保存 UTF-8 文件時會自動添加。它對人眼不可見,但會影響程序解析。

JavaScript 如何訪問中文欄位?

// ✅ 正確方式 1:使用方括號
row['與那國']

// ✅ 正確方式 2:使用變量
const colName = '與那國';
row[colName]

// ❌ 錯誤方式:點符號(不支持中文)
row.與那國  // 這樣不行!

PapaParse 的編碼處理

Papa.parse(text, {
    header: true,           // 第一行是標題
    skipEmptyLines: true,   // 跳過空行
    encoding: 'UTF-8'       // 指定編碼
});

📞 仍然遇到問題?

診斷步驟

  1. 運行 test.html

    • 查看是否能正確讀取欄位名稱
    • 檢查是否有錯誤訊息
  2. 檢查瀏覽器控制台

    • 按 F12 打開開發者工具
    • 查看 Console 標籤的錯誤
  3. 確認文件編碼

    • 使用記事本++或 VS Code 打開 CSV
    • 檢查是否為 UTF-8 編碼
  4. 截圖錯誤信息

    • 控制台的紅色錯誤訊息
    • test.html 顯示的錯誤
    • 提交到 GitHub Issues

✅ 修復確認

當您看到以下內容,表示修復成功:

主頁面(index.html)

✅ 統計卡片顯示數字
✅ 圖表正常繪製
✅ 兩個標籤頁可以點擊切換
✅ Comprehensive 表格顯示 9 個欄位
✅ Strait Transit 表格顯示 10 個欄位
✅ 表格中有 ✅ 符號
✅ 可以看到中文內容

測試頁面(test.html)

✅ 測試 1: 讀取 JapanandBattleship.csv
   ✅ 成功讀取 1356 筆記錄
   ✅ 成功訪問「與那國」欄位

✅ 測試 2: 讀取 merged_comprehensive_data_clean.csv
   ✅ 成功讀取 2462 筆記錄

🎉 總結

問題原因:

  1. CSV 文件有 UTF-8 BOM
  2. 中文欄位需要特殊處理
  3. 空值判斷不正確

修復方案:

  1. ✅ 移除 BOM 字符
  2. ✅ 正確訪問中文欄位
  3. ✅ 改進空值檢查
  4. ✅ 添加調試日誌

使用新版本:

  • index_fixed.html 替換 index.html
  • 使用 test.html 進行診斷
  • 本地測試後上傳到 GitHub

現在您的網頁應該可以正常顯示中文數據了! 🚀


文檔版本: 2.1
更新日期: 2025年1月2日
問題修復: UTF-8 BOM + 中文欄位訪問