Last Updated on 2022-03-24 by Clay
問題描述
今天我注意到我之前所寫的某一篇 LeetCode 解題紀錄中,居然缺乏了一部分的 Python 程式碼。我很自然地使用了題目的編號找到了該題,並從過去提交的程式碼中複製了 AC 的解答,並將其貼上我的文章,然後更新。
接著,令我驚訝的是,出現的並不是一如既往的更新成功的資訊,而是上方浮現紅色的警示:更新時發生錯誤。 無效的 JSON 回應。
在網路上我找到了幾種可能,但最後我算是靠著誤打誤撞的解決方法成功更新的,故一起記錄如下。
解決方法
網路上提供了幾種可能發生此問題的情況,分別為:
- 編輯器可能處於離線狀態
- 網址的永久連結錯誤
- 沒有跟網站後台資料庫連線
首先,我確認過我的網路環境,確認了目前是有網路的;接著我成功更新了其他文章、且更新內容有成功出現於我的網站上,所以可以確認網站後台的資料庫是正常運作的。
至於網址的永久連結…… 這個我不確定要怎麼確認,但我檢查過編輯器右側文章設定處、Yoast SEO 的代稱部分、以及我的網站該篇文章的網址,都確認是相同的。
這真的是很奇怪的問題,其他篇文章都可以正常更新、就只有特定的一篇一直失敗?
於是我想要回滾歷史版本,驚訝地發現了一件事:
我的所有空白,在當前無法更新的版本中全部都顯示著
—— 這是空白符號之一,我之前多多少少有做過爬蟲的工作,對於這種符號並不陌生,但我挺好奇為什麼當前版本會自動把空白轉成這種表示方式並保存下來。
除了空白之外也有一些其他符號被轉換了,在我回滾版本(沒有轉換成其他表示的版本)後,我就能成功更新該篇文章了!
或許是在前次儲存草稿時出了什麼問題,如果有特定文章無法更新的朋友,或許可以檢查看看。我想,或許是有些這樣的表示型態在 JSON 解析時是違反規則的,所以才會發生問題。
其實如果不排斥程式的部分,可以先將編輯器轉成「程式碼編輯器」的設定。
接下來應該會看到像是以下的畫面:
複製下面的部分,接著可以貼去處理逃脫字元的線上工具處理、或是使用我下方的 Python 程式來轉換:
# coding: utf-8
import html.parser
def main():
# HTMLParser
parser = html.parser.HTMLParser()
# Load data
raw_post = open("post.txt", "r", encoding="utf-8").read()
# Process
new_post = parser.unescape(raw_post)
# Save
with open("new_post.txt", "w", encoding="utf-8") as f:
f.write(new_post)
if __name__ == "__main__":
main()
我先將原始文章的部分儲存在 post.txt 這份文件中,轉換後自動產生 new_post.txt 的新文件。將新文件中的轉換好的程式碼內容重新貼在 WordPress 的編輯器上,現在應該就可以正常更新了!
或者是直接找一些線上工具來轉換,比方說:https://www.freeformatter.com/json-escape.html#ad-output
希望大家都能順利解決這個問題。