IT踩坑日常- bom頭標記導致json無法解析

更新 發佈閱讀 3 分鐘

前言

在專案中與廠商測試的過程中,發現對方API回傳的json字串出現無法解析的狀況,此篇記錄發現過程與解決的紀錄,希望之後有踩到坑的同仁可以少跌一些坑。

此次主要業務是與廠商做API介接

API(Post)-Response是用Json格式

result: 成功與否(true/false) 

all_count:總筆數

list []:票號約定回傳清單

tran_code:異動別(A=增加,D=刪除)

tkt_no:票號

tkt_tp:票種(01=成人,02=愛心,03=團體)

dep_id:單位代碼

date:約定日期/傳輸日期

status:狀態(00=異動成功,01=異動)


踩坑過程

接收到回傳的json結果為以下值

{"result":"true", "all_count":1, "list":[{"tran_code":"A", "tkt_no":"AKY0727","tkt_tp":"01","dep_id":"00R","date":"20240401","status":"00"}]}

程式在解析時丟出了無法解析的錯誤,乍看之下此字串是正常格式的json字串,但將此字串貼在記事本儲存時,會提醒你內文中含有urldecode的字元,儲存後的內容發生變化之類的提醒,再開啟文件之後發現原本的json字串變成

?{"result":"true", "all_count":1, "list":[{"tran_code":"A", "tkt_no":"AKY0727","tkt_tp":"01","dep_id":"00R","date":"20240401","status":"00"}]}

但實際上此字元也並非字面上看到的是藏著?的字元而是Bom表標頭的標記符號(不佔空間的空白,unicode編碼中表示:\uFEFF)導致,當json Response字串中藏著Bom標記符號時,預設使用UTF-8讀取json格式,就會遇到這個問題。

解決方法

1.程式面

讀取Response json或帶有Bom表的檔案內容時,先對此字串做過濾後,再做解析處理

//過濾掉Bom標頭字元​
responseBody= responseString.Trim(new char[] { '\uFEFF'});

//再將json string 解析成物件​
var result = JsonConvert.DeserializeObject<DeserializeObj>(responseBody);


2.檔案面

如果是檔案的字串藏有Bom的標頭符號,可用NotePad++ 開啟文件後在上面的編碼選取轉換UTF-8後再另存新檔,之後程式如果要讀取檔案內容應該讀取新的存檔

vocus|新世代的創作平台



參考資料

[C#] BOM 隱士


留言
avatar-img
DavidHi的沙龍
10會員
40內容數
此篇教學 : 使用GitHub架設免費的部落格網站,搭上Hexo靜態模板,在主題頁面中尋找屬於自己的風格套版,輕鬆擁有自己的Blog外,加上留言板/SEO等設定在記錄生活同時也增進與讀者的互動頻率。
DavidHi的沙龍的其他內容
2024/11/02
本文介紹了選擇排序演算法的基本邏輯與實作過程,透過範例分析陣列排序的交換步驟,以及相關的程式碼範例,幫助讀者理解選擇排序的時間與空間複雜度。選擇排序是一個簡單易懂的演算法,對於初學者來說是學習排序演算法的良好基礎。
Thumbnail
2024/11/02
本文介紹了選擇排序演算法的基本邏輯與實作過程,透過範例分析陣列排序的交換步驟,以及相關的程式碼範例,幫助讀者理解選擇排序的時間與空間複雜度。選擇排序是一個簡單易懂的演算法,對於初學者來說是學習排序演算法的良好基礎。
Thumbnail
2024/10/14
本文介紹插入排序演算法,透過與泡沫排序的比較,詳解其運作邏輯與時間、空間複雜度的分析。以撲克牌的整理為例,解釋如何逐步將數字插入已排序的序列中,並提供C#程式碼範例來幫助理解此演算法的實作過程,適合對基礎演算法有興趣的讀者。
Thumbnail
2024/10/14
本文介紹插入排序演算法,透過與泡沫排序的比較,詳解其運作邏輯與時間、空間複雜度的分析。以撲克牌的整理為例,解釋如何逐步將數字插入已排序的序列中,並提供C#程式碼範例來幫助理解此演算法的實作過程,適合對基礎演算法有興趣的讀者。
Thumbnail
2024/09/24
本文探討排序演算法中最基本的一種:泡沫排序。雖然在日常工作中我們多使用內建函數來進行排序,但瞭解其背後的邏輯和效能對於演算法學習至關重要。此文分步介紹了泡沫排序的實作過程,並分析其時間與空間複雜度,助於讀者更深入掌握基礎演算法。
Thumbnail
2024/09/24
本文探討排序演算法中最基本的一種:泡沫排序。雖然在日常工作中我們多使用內建函數來進行排序,但瞭解其背後的邏輯和效能對於演算法學習至關重要。此文分步介紹了泡沫排序的實作過程,並分析其時間與空間複雜度,助於讀者更深入掌握基礎演算法。
Thumbnail
看更多
你可能也想看
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
當這產品的這個 API 被呼叫,再從回傳內容的某個欄位欄位來判斷,只要“這個欄位”顯示 false 就代表不支援」,雖然這樣的設計也能滿足功能需求…
Thumbnail
當這產品的這個 API 被呼叫,再從回傳內容的某個欄位欄位來判斷,只要“這個欄位”顯示 false 就代表不支援」,雖然這樣的設計也能滿足功能需求…
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
在API介接中使用x-www-form-urlencoded格式時,可能會遇到一些踩坑的情況,本文分享了作者在這方面遇到的問題和解決方法。
Thumbnail
在API介接中使用x-www-form-urlencoded格式時,可能會遇到一些踩坑的情況,本文分享了作者在這方面遇到的問題和解決方法。
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
在專案中與廠商測試API回傳的json字串出現無法解析的狀況,記錄發現過程與解決的紀錄,提供程式面和檔案面的解決方法。
Thumbnail
在專案中與廠商測試API回傳的json字串出現無法解析的狀況,記錄發現過程與解決的紀錄,提供程式面和檔案面的解決方法。
Thumbnail
當你在開發程式時,難免會遇到各種錯誤和異常情況。這些錯誤可能是因為代碼中的錯誤、外部資源無法訪問或其他不可預期的狀況。為了提高程式的可靠性、穩定性和可維護性,我們使用「例外處理」來處理這些異常情況。
Thumbnail
當你在開發程式時,難免會遇到各種錯誤和異常情況。這些錯誤可能是因為代碼中的錯誤、外部資源無法訪問或其他不可預期的狀況。為了提高程式的可靠性、穩定性和可維護性,我們使用「例外處理」來處理這些異常情況。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News