

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>字串處理 &#8211; MaxCodeReview</title>
	<atom:link href="https://codereview.max-everyday.com/category/str/feed/" rel="self" type="application/rss+xml" />
	<link>https://codereview.max-everyday.com</link>
	<description>分享Max收集的小程式</description>
	<lastBuildDate>Sat, 17 Jan 2026 14:40:36 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://codereview.max-everyday.com/wp-content/uploads/2020/07/cropped-logo1_x512-32x32.jpg</url>
	<title>字串處理 &#8211; MaxCodeReview</title>
	<link>https://codereview.max-everyday.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>head 顯示前幾行</title>
		<link>https://codereview.max-everyday.com/head/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Thu, 01 Jan 2026 18:21:14 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=2109</guid>

					<description><![CDATA[為什麼需要這個程式 處理大型檔案的時候，如果 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">為什麼需要這個程式</h2>



<p>處理大型檔案的時候，如果一次把整份檔案讀進記憶體，電腦很容易當機。這段程式碼實現了類似 Linux 系統中 head 指令的功能。它能讓你只讀取檔案最前面幾行文字。這在檢查伺服器紀錄或大型數據檔案時非常方便。</p>



<h2 class="wp-block-heading">如何開始使用</h2>



<p>下載程式碼：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/head.py">https://github.com/max32002/MaxFontScripts/blob/master/head.py</a></p>



<p>確保你的電腦已經安裝了 Python 3 環境。你可以透過終端機或命令提示字元來執行它。</p>



<h2 class="wp-block-heading">基本指令格式</h2>



<pre class="wp-block-code"><code><code>python head.py <span style="background-color: initial; font-family: inherit; text-align: initial;">file</span> <span style="background-color: initial; font-family: inherit; text-align: initial;">lines</span></code></code></pre>



<p>第一個位置參數是 file，代表你要讀取的目標檔案路徑。</p>



<p>第二個位置參數是 lines，代表你想從最前讀取幾行。</p>



<p>最後還有一個選用參數 -o 或 &#8211;output。如果你加上這個參數，程式會將結果存入你指定的檔案。</p>



<h2 class="wp-block-heading">實際使用範例</h2>



<p>如果你想直接在螢幕上查看最前 10 行內容，可以輸入：</p>



<pre class="wp-block-code"><code>python head.py log.txt 10
</code></pre>



<p>如果你想把最前 50 行的內容存成一個新檔案 result.txt，可以輸入：</p>



<pre class="wp-block-code"><code>python head.py log.txt 50 -o result.txt
</code></pre>



<p>這樣就能快速完成檔案的擷取。即使檔案大小有數個 GB 也能瞬間完成。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>grep 查詢文字檔內容</title>
		<link>https://codereview.max-everyday.com/grep/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Thu, 01 Jan 2026 18:14:25 +0000</pubDate>
				<category><![CDATA[字串處理]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=2105</guid>

					<description><![CDATA[平常寫程式或做作業常要翻 log 檔案。檔案 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>平常寫程式或做作業常要翻 log 檔案。檔案太大時根本看不完。這段 Python 腳本可以幫上忙。它像是一個客製化的 grep 工具。支援關鍵字高亮顯示。還能決定要看關鍵字前後幾行內容。這對分析程式報錯很有幫助。</p>



<h2 class="wp-block-heading">如何開始使用</h2>



<p>下載程式碼：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/grep.py">https://github.com/max32002/MaxFontScripts/blob/master/grep.py</a></p>



<p>確保你的電腦已經安裝了 Python 3 環境。你可以透過終端機或命令提示字元來執行它。</p>



<h2 class="wp-block-heading">基本指令格式</h2>



<pre class="wp-block-code"><code>python grep.py 關鍵字 路徑</code></pre>



<p>你可以加上這些參數：</p>



<ul class="wp-block-list">
<li>-b 數字：顯示關鍵字前面幾行。</li>



<li>-a 數字：顯示關鍵字後面幾行。</li>



<li>-i：忽略英文字母大小寫。</li>



<li>-l：把找到的關鍵字標上顏色。</li>



<li>-E：開啟正規表示法搜尋模式。</li>



<li>-ext .txt：搜尋指定副檔名。</li>



<li>-o 檔名：將搜尋結果存成檔案。</li>



<li>-r or -R：預設只會掃描該層資料夾，除非你加上 -r 才會遞迴搜尋子目錄。</li>
</ul>



<h2 class="wp-block-heading">實際操作範例</h2>



<p>假設要找 logs 資料夾內所有包含 ERROR 的行。並且要看錯誤發生的前 2 行與後 2 行。還要標記顏色。</p>



<pre class="wp-block-code"><code>python grep.py ERROR ./logs -b 2 -a 2 -l
</code></pre>



<p>如果要用正規表示法找特定格式。例如找 IP 位址。並限制只找 .txt 檔案。</p>



<pre class="wp-block-code"><code>python grep.py "&#91;0-9]+\.&#91;0-9]+\.&#91;0-9]+\.&#91;0-9]+" ./data -E -ext .txt
</code></pre>



<p>如果想把搜尋結果存起來。方便之後寫報告用。</p>



<pre class="wp-block-code"><code>python grep.py "Login Failed" auth.log -o result.txt
</code></pre>



<p>這套工具邏輯很單純。不用安裝複雜的套件。做實驗數據分析或是 debug 都很實用。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>正規表示式（Regular Expression）在處理文字時非常強大。以下整理了最常用的規則與符號，不論是在 Python、JavaScript 或是終端機工具都通用。</p>



<h3 class="wp-block-heading">基本字元與邊界</h3>



<p>這些符號用來定位文字的位置或是匹配特定類型的單一字元。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>符號</strong></td><td><strong>說明</strong></td><td><strong>範例</strong></td></tr></thead><tbody><tr><td><strong>.</strong></td><td>匹配除換行符號外的任何單一字元</td><td><code>a.c</code> 可匹配 abc, a2c</td></tr><tr><td><strong>^</strong></td><td>匹配字串的開頭</td><td><code>^Hello</code> 必須以 Hello 開頭</td></tr><tr><td><strong>$</strong></td><td>匹配字串的結尾</td><td><code>done$</code> 必須以 done 結尾</td></tr><tr><td><strong>\d</strong></td><td>匹配任何數字，等同於 [0-9]</td><td><code>\d\d</code> 匹配兩位數</td></tr><tr><td><strong>\D</strong></td><td>匹配任何非數字字元</td><td><code>\D</code> 匹配字母或符號</td></tr><tr><td><strong>\w</strong></td><td>匹配字母、數字或底線</td><td><code>\w+</code> 匹配一個單字</td></tr><tr><td><strong>\s</strong></td><td>匹配任何空白字元（空格、Tab、換行）</td><td><code>\s+</code> 匹配連續空白</td></tr><tr><td><strong>\b</strong></td><td>匹配單字邊界</td><td><code>\bcat\b</code> 只匹配 cat 不含 category</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">量詞（次數匹配）</h3>



<p>用來決定前面的字元可以連續出現幾次。</p>



<ul class="wp-block-list">
<li><strong>*</strong>：出現 0 次或多次。</li>



<li><strong>+</strong>：出現 1 次或多次（至少要有一個）。</li>



<li><strong>?</strong>：出現 0 次或 1 次（選用性質）。</li>



<li><strong>{n}</strong>：精確出現 n 次。</li>



<li><strong>{n,}</strong>：出現至少 n 次。</li>



<li><strong>{n,m}</strong>：出現 n 到 m 次之間。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">字元集合與群組</h3>



<p>當你需要指定一段範圍或是將多個規則組合在一起時。</p>



<ul class="wp-block-list">
<li><strong>[abc]</strong>：匹配括號內的任一字元。</li>



<li><strong>[^abc]</strong>：匹配除了 abc 以外的任何字元。</li>



<li><strong>[a-z]</strong>：匹配小寫字母 A 到 Z。</li>



<li><strong>[A-Z]</strong>：匹配大寫字母 A 到 Z。</li>



<li><strong>|</strong>：邏輯「或」（OR），例如 <code>cat|dog</code> 匹配 cat 或 dog。</li>



<li><strong>(&#8230;)</strong>：擷取群組，將規則組合在一起，之後可以用 <code>\1</code> 或在程式中提取。</li>



<li><strong>(?:&#8230;)</strong>：非擷取群組，只組合不記錄內容，效能較好。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">貪婪與懶惰匹配</h3>



<p>這是進階使用時最常遇到的陷阱。</p>



<p>預設情況下，量詞是「貪婪的」，會盡可能匹配最長的字串。例如對於 <code>&lt;div&gt;test&lt;/div&gt;</code> 使用 <code>&lt;.*&gt;</code> 會匹配到整個字串。</p>



<p>如果在量詞後面加上問號（例如 <code>*?</code> 或 <code>+?</code>），會變成「懶惰模式」，只匹配到第一個符合條件的結尾。例如 <code>&lt;.*?&gt;</code> 只會匹配到 <code>&lt;div&gt;</code>。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">實戰小筆記</h3>



<p>在撰寫規則時，如果遇到特殊符號如 <code>.</code>、<code>*</code>、<code>?</code>、<code>(</code> 等，必須在前面加上反斜線 <code>\</code> 進行跳脫，才能匹配符號本身。</p>



<p>例如要匹配一個 IP 地址，簡單的寫法會是：<code>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}</code>。</p>



<p>你想看如何將這些規則應用在你之前的 versionName 修改腳本中嗎？</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>非擷取群組 <code>(?:...)</code> 的主要作用是「只組合、不存檔」。它讓你可以對一組字元進行量詞操作，但不會在記憶體中記錄這個群組的內容，這在處理複雜字串或提升效能時很有用。</p>



<h3 class="wp-block-heading">範例一：純粹為了使用量詞</h3>



<p>如果你想匹配「連續出現多次的單字」，但你只關心整個字串，不需要單獨取出那個單字。</p>



<ul class="wp-block-list">
<li><strong>正規表示式</strong>：<code>^(?:https?|ftp)://[^\s]+$</code></li>



<li><strong>說明</strong>：這裡用 <code>(?:https?|ftp)</code> 把通訊協定組合起來，後面加個 <code>|</code> 代表「或」。如果你用 <code>(https?|ftp)</code>，程式會額外幫你存下一個變數（Group 1）記錄到底是匹配到 http 還是 ftp。用非擷取群組則可以省去這個開銷。</li>
</ul>



<h3 class="wp-block-heading">範例二：搭配擷取群組使用</h3>



<p>當你的正規表示式很長，裡面有很多層括號，使用非擷取群組可以讓你的「編號」更乾淨。</p>



<ul class="wp-block-list">
<li><strong>待處理文字</strong>：<code>ID: 123-ABC, ID: 456-DEF</code></li>



<li><strong>正規表示式</strong>：<code>ID: (\d+)-(?:[A-Z]+)</code></li>



<li><strong>程式結果</strong>：
<ul class="wp-block-list">
<li><code>Group 1</code> 會拿到 <code>123</code>。</li>



<li>因為 <code>[A-Z]+</code> 放在 <code>(?:...)</code> 裡面，它不會被分配到 <code>Group 2</code>。</li>



<li>這在寫程式時，可以避免去算到底現在是第幾個括號。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">範例三：在分割字串時的差異 (以 Python 為例)</h3>



<p>這是在實作中最明顯的區別。</p>



<p>Python</p>



<pre class="wp-block-code"><code>import re

text = "apple123orange456banana"

# 使用一般群組：分隔符號會被保留在結果清單中
print(re.split(r"(\d+)", text)) 
# 輸出: &#91;'apple', '123', 'orange', '456', 'banana']

# 使用非擷取群組：分隔符號會被丟棄，只留下分割後的內容
print(re.split(r"(?:\d+)", text)) 
# 輸出: &#91;'apple', 'orange', 'banana']
</code></pre>



<h3 class="wp-block-heading">總結建議</h3>



<p>當你發現括號只是為了「要把這幾個字看成一體」或是「為了用 OR 邏輯」，而不是為了之後要把這段文字抽出來用時，就應該習慣加上 <code>?:</code>。這不僅能讓程式跑得快一點，也能讓後續維護程式碼的人（或你自己）知道，這一段內容不需要被抓取。</p>



<p></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>檔案內容的字串取代</title>
		<link>https://codereview.max-everyday.com/replace-string/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Wed, 31 Dec 2025 08:36:07 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=2076</guid>

					<description><![CDATA[為什麼需要這段程式碼 手動修改幾十個檔案的內 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">為什麼需要這段程式碼</h2>



<p>手動修改幾十個檔案的內容很累。如果只是改一個字還好，但如果要改符合特定規則的文字，手動操作幾乎不可能。這段 Python 腳本就是為了解決這個問題。它能幫你快速搜尋資料夾，找到符合條件的檔案，並用正則表達式進行批次替換。這對處理程式碼版本號、路徑更新或大量文件修改非常有用。</p>



<h2 class="wp-block-heading">如何開始使用</h2>



<p>下載程式碼：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/replace_string.py">https://github.com/max32002/MaxFontScripts/blob/master/replace_string.py</a></p>



<p>確保你的電腦已經安裝了 Python 3 環境。你可以透過終端機或命令提示字元來執行它。</p>



<h2 class="wp-block-heading">基本的文字替換</h2>



<p>最簡單的用法是直接替換特定的單字。如果你有一個資料夾叫做 docs，裡面有很多文件要把 Apple 改成 Orange，你可以輸入指令。</p>



<pre class="wp-block-code"><code>python replace_string.py ./docs "Apple" "Orange"
</code></pre>



<p>這會掃描 docs 資料夾下的所有檔案。只要看到 Apple 就會換成 Orange。程式會自動過濾無法開啟的檔案。修改成功的檔案會顯示在畫面上。</p>



<h2 class="wp-block-heading">進階的參數</h2>



<p>-r or -R：預設只會掃描該層資料夾，除非你加上 -r 才會遞迴搜尋子目錄。</p>



<h2 class="wp-block-heading">使用正則表達式處理複雜規則</h2>



<p>這段腳本強大的地方在於支援正則表達式。假設你有很多設定檔，裡面的版本號可能是 v1.0 或 v2.5。你想把所有 v 開頭加上數字的版本號都統一改成 v3。你可以利用正則表達式的符號。</p>



<pre class="wp-block-code"><code>python replace_string.py ./project "v\d+" "v3"
</code></pre>



<p>這裡的 v\d+ 代表一個 v 後面接一個以上的數字。這比單純的關鍵字搜尋更靈活。它能一次處理所有符合規則的變動。</p>



<h2 class="wp-block-heading">指定特定的檔案類型</h2>



<p>有時候你不想動到資料夾裡的所有檔案。例如你只想修改副檔名是 .conf 的設定檔。這時候可以在指令最後面加上過濾條件。</p>



<pre class="wp-block-code"><code>python replace_string.py ./config "127.0.0.1" "0.0.0.0" "*.conf"
</code></pre>



<p>這樣腳本就只會檢查 .conf 結尾的檔案。這能避免誤動到圖片或執行檔。這對保護專案中的其他檔案非常安全。</p>



<h2 class="wp-block-heading">運作原理與安全機制</h2>



<p>腳本在修改時會先建立一個暫存檔。它會逐行讀取原檔案，處理完後寫入暫存檔。如果內容真的有變動，才會取代舊檔案。如果內容完全一樣，就會刪除暫存檔。這種做法能防止程式執行到一半出錯，導致原本的檔案損毀。</p>



<h2 class="wp-block-heading">使用前的小提醒</h2>



<p>雖然腳本有安全機制，但批次修改依然有風險。建議在執行大量替換前，先備份你的資料夾。你可以先拿一個小檔案做測試。確認正則表達式的結果符合預期後，再對整個專案執行。這是一個好習慣。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>想試試看對特定目錄下的所有 Markdown 檔案進行標題格式轉換嗎？</p>



<h2 class="wp-block-heading">實戰演練調整標題層級</h2>



<p>假設你寫了很多筆記，但發現一級標題太大了。你想把所有 Markdown 檔案的一級標題改成二級標題。這在整理文件架構時非常有幫助。手動改一百個檔案會耗費太多時間。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">具體的執行指令</h2>



<p>你可以使用正則表達式來精確定位標題。開啟終端機並切換到腳本所在的目錄。輸入下面的指令。</p>



<pre class="wp-block-code"><code>python replace_string.py ./my_notes "^#\s" "## " "*.md"
</code></pre>



<p>這裡的 <code>^#\s</code> 是關鍵。<code>^</code> 代表每一行的開頭。<code>#</code> 是我們要找的符號。<code>\s</code> 代表空白鍵。這樣可以確保只會改到真正的標題。它不會動到內文中間出現的井字號。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">執行後的結果</h2>



<p>程式會掃描 my_notes 資料夾下所有的 .md 檔案。它會把每一行開頭的井字號多加一個。處理完後你會看到螢幕顯示哪些檔案已經被修改。如果檔案裡面沒有符合條件的內容，程式會顯示無變動。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">檢查與備份</h2>



<p>在執行這類批次修改前，建議先備份資料夾。你可以先複製一份複本出來。或者先對單一檔案執行測試。確認轉換邏輯完全正確。這能避免正則表達式寫錯導致檔案內容亂掉。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">正則表達式的基本邏輯</h2>



<p>正則表達式其實就是一種文字的「特徵描述」。它用一串特殊的符號，來描述文字長什麼樣子。這在處理大量文件時超級好用。你可以把它想像成一種進階版的搜尋功能。以下整理了最常用的幾組符號。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">基礎匹配符號</h2>



<p>這些符號用來代表單一個字元或是位置。它們是所有正則表達式的根基。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>符號</strong></td><td><strong>說明</strong></td><td><strong>範例</strong></td></tr></thead><tbody><tr><td><strong>.</strong></td><td>匹配除了換行以外的任何單一字元</td><td><strong>a.c</strong> 可匹配 abc 或 a1c</td></tr><tr><td><strong>^</strong></td><td>匹配字串的開頭</td><td><strong>^Hello</strong> 必須以 Hello 開頭</td></tr><tr><td><strong>$</strong></td><td>匹配字串的結尾</td><td><strong>done$</strong> 必須以 done 結尾</td></tr><tr><td><strong>\</strong></td><td>轉義符號，用來搜尋原本就有特殊意義的符號</td><td><strong>\.</strong> 用來搜尋真正的點號</td></tr><tr><td><strong>[ ]</strong></td><td>匹配括號內的任一字元</td><td><strong>[aeiou]</strong> 匹配任何一個母音</td></tr><tr><td><strong>[^ ]</strong></td><td>不匹配括號內的任何字元</td><td><strong>[^0-9]</strong> 匹配任何非數字的字元</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">次數與位置的標記</h2>



<p>這些符號接在字元後面。用來指定前面的字元應該出現幾次。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>符號</strong></td><td><strong>說明</strong></td><td><strong>範例</strong></td></tr></thead><tbody><tr><td><strong>*</strong></td><td>出現 0 次或多次</td><td><strong>ab*</strong> 可匹配 a, ab, abb</td></tr><tr><td><strong>+</strong></td><td>出現 1 次或多次</td><td><strong>ab+</strong> 可匹配 ab, abb (不含 a)</td></tr><tr><td><strong>?</strong></td><td>出現 0 次或 1 次</td><td><strong>apples?</strong> 可匹配 apple 或 apples</td></tr><tr><td><strong>{n}</strong></td><td>剛好出現 n 次</td><td><strong>\d{3}</strong> 匹配 3 個數字</td></tr><tr><td><strong>{n,}</strong></td><td>出現至少 n 次</td><td><strong>\d{2,}</strong> 匹配 2 個以上的數字</td></tr><tr><td><strong>{n,m}</strong></td><td>出現 n 到 m 次</td><td><strong>\d{2,4}</strong> 匹配 2 到 4 個數字</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">常用字元群組</h2>



<p>為了方便縮寫，正則表達式提供了一些常用的預設符號。這能讓你的規則看起來更簡潔。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>符號</strong></td><td><strong>說明</strong></td><td><strong>同義表達式</strong></td></tr></thead><tbody><tr><td><strong>\d</strong></td><td>任何數字</td><td>[0-9]</td></tr><tr><td><strong>\D</strong></td><td>任何非數字</td><td>[^0-9]</td></tr><tr><td><strong>\w</strong></td><td>數字、英文字母或下底線</td><td>[a-zA-Z0-9_]</td></tr><tr><td><strong>\s</strong></td><td>任何空白字元 (空格、Tab、換行)</td><td>[ \f\n\r\t\v]</td></tr><tr><td><strong>\S</strong></td><td>任何非空白字元</td><td>[^ \f\n\r\t\v]</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">實戰應用範例1</h2>



<p>把上面的符號組合起來，就能處理生活中的各種需求。你可以參考下面的例子來練習。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>驗證手機號碼 (台灣格式)</p>



<p>^09\d{8}$</p>



<p>解釋：開頭必須是 09，後面接剛好 8 個數字。</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>簡單的電子郵件格式</p>



<p>\w+@\w+\.\w+</p>



<p>解釋：一串字元接 @，再接一串字元，最後接點號跟一段文字。</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>移除多餘的空白行</p>



<p>^\s*$</p>



<p>解釋：從開頭到結尾都只有空白或沒內容的行。</p>
</blockquote>



<p>正則表達式雖然看起來像外星語。但只要拆開來看，邏輯其實很固定。建議先從最基礎的符號開始試。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">實戰應用範例2</h2>



<p>你的需求是將 <code>com.app.a</code> 修改為 <code>com.app.b</code>。這裡有一個細節需要注意：你不希望誤改到像是 <code>com.lwfd.apple</code> 這種只是剛好開頭一樣的字串。因此，我們在寫正則表達式時，必須把「邊界」考慮進去。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">推薦的正則表達式語法</h2>



<p>你可以使用下面的規則來進行精確替換：</p>



<p>搜尋目標： com\.app\.a(?=[.;])|com\.app\.a\b</p>



<p>替換內容： com.app.b</p>



<p>這裡有幾個符號的作用說明：</p>



<ul class="wp-block-list">
<li><strong><code>\.</code></strong>：因為點號在正則中有特殊意義，所以要加反斜線，代表真正的「點」。</li>



<li><strong><code>(?=[.;])</code></strong>：這是一個前瞻斷言，表示後面必須接著分號或點號，但這部分不會被取代掉。</li>



<li><strong><code>\b</code></strong>：代表單字的邊界，確保 a 後面沒有接其他英文字母。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">實際操作指令</h2>



<p>使用我們之前討論的 Python 腳本，你可以直接在終端機輸入這行指令：</p>



<pre class="wp-block-code"><code>python replace_string.py ./src "com\.app\.a(?=&#91;.;])|com\.app\.a\b" "com.lwfd.b" "*.java"
</code></pre>



<p>這個指令會掃描 <code>src</code> 資料夾下所有的 Java 檔案。它會精確地把 <code>com.app.a;</code> 換成 <code>com.app.b;</code>，也會把 <code>com.app.a.abc</code> 換成 <code>com.app.b.abc</code>。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">為什麼這樣寫比較安全</h2>



<p>如果你只用 <code>com.app.a</code> 當關鍵字，萬一程式碼裡有 <code>com.app.archive</code>，它就會被錯誤地改成 <code>com.app.b rchive</code>，這會導致程式碼壞掉。加上邊界判斷（點號、分號或 <code>\b</code>）可以確保只改到你真正想要變動的部分。</p>



<p>這類替換通常發生在專案重構（Refactor）的時候。如果檔案數量很多，這行指令能幫你省下大約半小時的手動修改時間。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>檔案名稱前綴管理：批次新增或移除前綴</title>
		<link>https://codereview.max-everyday.com/prefix_manager/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Tue, 25 Mar 2025 05:37:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1928</guid>

					<description><![CDATA[Windows 平台的 rename 對萬用 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Windows 平台的 rename 對萬用字元(Wildcards)的支援極差, 與其要用 for 指令去修改檔名, 不如改用  python script 來處理還比較方便. </p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>為什麼要學這個？</strong></p>



<p>在日常工作或專案中，我們經常需要處理大量檔案。有時候，為了方便管理或分類，我們需要在檔案名稱前加上特定的前綴，例如日期、專案名稱或版本號。而有時候，我們又需要移除這些前綴，例如在檔案整理或匯出時。</p>



<p>手動一個一個修改檔案名稱既耗時又容易出錯。這時候，學習使用 Python 腳本來批次處理檔案名稱就顯得非常重要。這個腳本可以幫助您：</p>



<ul class="wp-block-list">
<li><strong>節省時間和精力：</strong> 快速批次修改大量檔案名稱，避免重複勞動。</li>



<li><strong>提高工作效率：</strong> 輕鬆管理檔案，讓檔案整理變得更有效率。</li>



<li><strong>減少錯誤：</strong> 避免手動修改檔案名稱時可能發生的錯誤。</li>



<li><strong>自動化工作流程：</strong> 將檔案名稱管理融入您的自動化工作流程中。</li>
</ul>



<p><strong>使用方法</strong></p>



<ol class="wp-block-list">
<li><strong>儲存程式碼：</strong> <br><a href="https://github.com/max32002/MaxFontScripts/blob/master/prefix_manager.py">https://github.com/max32002/MaxFontScripts/blob/master/prefix_manager.py</a></li>



<li><strong>開啟命令列或終端機：</strong> 在您的作業系統中開啟命令列或終端機。</li>



<li><strong>執行腳本：</strong> 使用 <code>python prefix_manager.py</code> 指令執行腳本，並根據您的需求提供相應的參數。</li>
</ol>



<p><strong>參數說明</strong></p>



<ul class="wp-block-list">
<li><strong><code>action</code> (必要參數):</strong>
<ul class="wp-block-list">
<li>指定要執行的操作。</li>



<li>可選值：<code>add</code>（新增前綴）或 <code>remove</code>（移除前綴）。</li>
</ul>
</li>



<li><strong><code>--input</code> (可選參數):</strong> 可簡化為 -i
<ul class="wp-block-list">
<li>指定要處理的目錄路徑。</li>



<li>預設值：當前工作目錄。</li>



<li>例如：<code>--input C:\Your\Folder\Path</code> 或 <code>--input /path/to/your/folder</code>。</li>
</ul>
</li>



<li><strong><code>--prefix</code> (<code>action</code> 為 <code>add</code> 時的必要參數):</strong> 可簡化為 -p
<ul class="wp-block-list">
<li>指定要新增的前綴。</li>



<li>例如：<code>--prefix "report_"</code> 或 <code>--prefix "v1.2_"</code>。</li>
</ul>
</li>



<li><strong><code>--length</code> (<code>action</code> 為 <code>remove</code> 時的必要參數):</strong> 可簡化為 -l
<ul class="wp-block-list">
<li>指定要移除的前綴長度。</li>



<li>預設值：<code>3</code>。</li>



<li>例如: <code>--length 5</code></li>
</ul>
</li>



<li><strong><code>--ext</code> :</strong> 可簡化為 -e
<ul class="wp-block-list">
<li>限定副檔名的關鍵字, 例如: .png</li>
</ul>
</li>



<li><strong><code>--</code>preview :</strong> 
<ul class="wp-block-list">
<li>是否為預覽(唯讀)模式，只看到改名結果，不實際修改檔名。</li>
</ul>
</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>使用範例</strong></p>



<ol class="wp-block-list">
<li><strong>在當前目錄下的所有檔案名稱前新增 &#8220;report_&#8221; 前綴：</strong><br><code>python prefix_manager.py add --prefix "report_"</code></li>



<li><strong>在指定目錄下的所有檔案名稱前新增 &#8220;v1.2_&#8221; 前綴：</strong> <br><code>python prefix_manager.py add --input "C:\My Documents\Project" --prefix "v1.2_"</code></li>



<li><strong>移除當前目錄下所有檔案名稱的前 5 個字元：</strong> <br><code>python prefix_manager.py remove --length 5</code></li>



<li><strong>移除指定目錄下所有檔案名稱的前 3 個字元：</strong> <br><code>python prefix_manager.py remove --input "/home/user/files"</code></li>
</ol>



<p><strong>注意事項：</strong></p>



<ul class="wp-block-list">
<li>在執行腳本之前，請務必備份您的檔案，以防發生意外情況。</li>



<li>如果檔案名稱長度小於要移除的前綴長度，程式碼可能會產生錯誤。</li>



<li>您可以根據您的需求修改腳本，例如新增檔案類型檢查或處理子目錄。</li>



<li>在windows環境,目錄路徑請使用雙引號包覆。</li>
</ul>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>生成字元圖像</title>
		<link>https://codereview.max-everyday.com/generate_glyphs/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Mon, 24 Mar 2025 14:03:07 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1916</guid>

					<description><![CDATA[好的，這是一篇關於使用 Python 腳本生 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>好的，這是一篇關於使用 Python 腳本生成字元圖像的教學文章：</p>



<p><strong>為什麼要學這個？</strong></p>



<p>在許多情況下，我們需要將字元轉換為圖像，例如：</p>



<ul class="wp-block-list">
<li><strong>生成字型圖集：</strong> 用於遊戲開發、網頁設計或圖形設計。</li>



<li><strong>建立訓練資料集：</strong> 用於機器學習中的字元辨識。</li>



<li><strong>產生藝術字體：</strong> 創造獨特的字體效果。</li>



<li><strong>驗證碼產生:</strong> 產生驗證碼圖片。</li>
</ul>



<p>這個 Python 腳本提供了一個方便的方法，可以根據指定的字型、大小和樣式，快速生成字元圖像。</p>



<p><strong>使用方法</strong></p>



<ul class="wp-block-list">
<li><strong>安裝 Python 和 opencv, freetype：</strong></li>
</ul>



<pre class="wp-block-code"><code>pip install opencv-python numpy freetype-py </code></pre>



<p>安裝 opencv 與 freetype 圖像處理庫。</p>



<ul class="wp-block-list">
<li><strong>準備字型檔案：</strong>
<ul class="wp-block-list">
<li>將您要使用的字型檔案（例如 <code>.ttf</code> 或 <code>.otf</code>）放在一個容易存取的位置。</li>
</ul>
</li>



<li><strong>執行腳本：</strong>
<ul class="wp-block-list">
<li>將腳本儲存為一個 <code>.py</code> 檔案（例如 <code>generate_glyphs.py</code>）。腳本傳送門:<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/generate_glyphs.py">https://github.com/max32002/MaxFontScripts/blob/master/<code>generate_glyphs</code>.py</a></li>



<li>在命令列或終端機中，使用 </li>
</ul>
</li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py &#91;參數] </code></pre>



<p></p>



<p><strong>參數說明</strong></p>



<ul class="wp-block-list">
<li><code>--keyword</code>：
<ul class="wp-block-list">
<li>要生成的字串。</li>



<li>預設值為空字串。</li>
</ul>
</li>



<li><code>--font</code>：
<ul class="wp-block-list">
<li>字型檔案的路徑。</li>



<li>必要參數。</li>
</ul>
</li>



<li><code>--font_size</code>：
<ul class="wp-block-list">
<li>字型大小。</li>



<li>預設值為 256。</li>
</ul>
</li>



<li><code>--canvas_size</code>：
<ul class="wp-block-list">
<li>圖布大小（邊長）。</li>



<li>預設值為 256。</li>
</ul>
</li>



<li><code>--output_dir</code>：
<ul class="wp-block-list">
<li>輸出目錄。</li>



<li>預設值為 <code>glyph_image</code>。</li>
</ul>
</li>



<li><code>--filename_rule</code>：
<ul class="wp-block-list">
<li>檔案名稱規則。</li>



<li>可選值：<code>seq</code>（序列號）、<code>char</code>（字元）、<code><strong>unicode_int</strong></code>（Unicode 整數）、<code>unicode_hex</code>（Unicode 十六進位）。</li>



<li>預設值為 <code><strong>unicode_int</strong></code>。</li>
</ul>
</li>



<li><code>-f</code> (也可以用 <code>--format</code> )：
<ul class="wp-block-list">
<li>副檔名</li>



<li>預設值為 <code>png</code>。</li>
</ul>
</li>



<li><code>--file</code>：
<ul class="wp-block-list">
<li>從文字檔案讀取字元。</li>



<li>可選參數。</li>
</ul>
</li>



<li><code>--x_offset</code>：
<ul class="wp-block-list">
<li>字型 X 軸偏移量，預設為 0。</li>
</ul>
</li>



<li><code>--y_offset</code>：
<ul class="wp-block-list">
<li>字型 Y 軸偏移量，預設為 0。</li>
</ul>
</li>



<li><code>--clear</code>：
<ul class="wp-block-list">
<li>清除輸出目錄中的所有檔案。</li>



<li>如果存在這個參數，在生成檔案前，會先清除 output_dir 內的所有檔案。</li>
</ul>
</li>
</ul>



<p><strong>使用範例</strong></p>



<ul class="wp-block-list">
<li><strong>生成包含 &#8220;Hello&#8221; 字串的字元圖像：</strong></li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py --font font.ttf --keyword "Hello"</code></pre>



<ul class="wp-block-list">
<li><strong>從文字檔案讀取字元並生成圖像：</strong></li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py --font font.ttf --file characters.txt</code></pre>



<ul class="wp-block-list">
<li><strong>使用序列號作為檔案名稱，並設定字型大小和圖布大小：</strong></li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py --font font.ttf --keyword "ABC" --filename_rule seq --font_size 128 --canvas_size 128</code></pre>



<ul class="wp-block-list">
<li><strong>在生成檔案前，先清除 output_dir 內的所有檔案。</strong></li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py --font font.ttf --keyword "ABC" --clear</code></pre>



<p><strong>注意事項</strong></p>



<ul class="wp-block-list">
<li>請確保您提供的字型檔案路徑是正確的。</li>



<li>您可以根據需要調整參數，以獲得所需的圖像效果。</li>



<li>使用 <code>--clear</code> 參數會刪除整個輸出目錄及其中的所有檔案，請謹慎使用。</li>



<li>如果輸出目錄不存在，<code>--clear</code> 參數不會有任何作用。</li>
</ul>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>查詢某一個字的部件</title>
		<link>https://codereview.max-everyday.com/find_component/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Mon, 24 Mar 2025 04:32:23 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1909</guid>

					<description><![CDATA[您是否對漢字的結構感到好奇？想知道哪些字包含 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>您是否對漢字的結構感到好奇？想知道哪些字包含特定的部件？這個 Python 腳本可以幫助您輕鬆查詢中文字的部件，讓您更深入地了解漢字的奧秘。</p>



<h2 class="wp-block-heading">為什麼要學習這個？</h2>



<ul class="wp-block-list">
<li><strong>漢字學習與研究：</strong> 對於漢字學習者和研究者來說，了解漢字的部件組成至關重要。這個腳本可以幫助您快速找到包含特定部件的字，加速您的學習和研究過程。</li>



<li><strong>文字分析與處理：</strong> 在進行文字分析或處理時，您可能需要根據漢字的部件進行篩選或分類。這個腳本可以作為一個強大的工具，幫助您實現這些任務。</li>



<li><strong>字體設計與開發：</strong> 字體設計師可以利用這個腳本來分析漢字的部件分布，從而設計出更符合漢字結構的字體。</li>



<li><strong>教學應用：</strong> 教師可以使用這個腳本來製作漢字教學材料，例如部件檢索遊戲或部件分析練習。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">前置作業</h2>



<p>首先，您需要準備以下檔案：</p>



<ol class="wp-block-list">
<li><code>ChineseDictionary.py</code>：包含 <code>ChineseDictionary</code> 類別的 Python 檔案，用於讀取和查詢中文字典。</li>



<li><code>Dictionary.json</code>：包含中文字典資料的 JSON 檔案。</li>



<li><code>find_component.py</code>：您要執行的 Python 腳本。<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/find_component.py">https://github.com/max32002/MaxFontScripts/blob/master/find_component.py</a></li>
</ol>



<p>第1 與第2 的下載點:<br><a href="https://github.com/max32002/chinese_dictionary">https://github.com/max32002/chinese_dictionary</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">使用方法</h2>



<p>按照以下步驟使用該腳本：</p>



<ol class="wp-block-list">
<li><strong>安裝 Python：</strong> 如果您尚未安裝 Python，請先安裝 Python 3。</li>



<li><strong>執行腳本：</strong> 在命令列或終端機中，導航到包含腳本的目錄，然後執行以下命令：</li>
</ol>



<pre class="wp-block-preformatted">python find_component.py [--input &lt;輸入檔案&gt;] [--keyword &lt;部件關鍵字&gt;] [--output &lt;輸出檔案&gt;]</pre>



<p><strong>參數說明：</strong></p>



<ul class="wp-block-list">
<li><code>--input &lt;輸入檔案&gt;</code>：可選參數，包含要查詢的部件的文字檔。</li>



<li><code>--keyword &lt;部件關鍵字&gt;</code>：可選參數，要查詢的部件關鍵字。</li>



<li><code>--output &lt;輸出檔案&gt;</code>：可選參數，輸出結果的文字檔，預設為 <code>output.txt</code>。</li>
</ul>



<p><strong>範例：</strong></p>



<pre class="wp-block-preformatted"># 查詢包含部件「女」的字
python find_characters_by_component.py --keyword 女

# 查詢包含部件「女」和「木」的字
python find_characters_by_component.py --keyword 女木

# 查詢包含部件「女」和「木」，並從 input.txt 檔案中讀取更多部件
python find_characters_by_component.py --input input.txt --keyword 女木

# 將結果輸出到 result.txt 檔案
python find_characters_by_component.py --keyword 女 --output result.txt</pre>



<p><strong>執行結果：</strong></p>



<pre class="wp-block-preformatted">找到 469 個包含部件 ['女'] 的字，已輸出到 output.txt</pre>



<p>輸出檔案（例如 <code>output.txt</code>）：</p>



<pre class="wp-block-preformatted">佞囡奴奵奶奷奸她奺奻奼好奾奿妀妁如妃妄妅妆妇妈妉妊妋妌妎妏妐妑妒妓妔妕妖妗妘妙妚妜妝妞妟妠妡妢妣妤妥妦妧妨妩妪妫㚷妬妭妮妯妰妱妲妳妴妵妶妷妸妹妺妼妽妾妿姀姁姂姃姄姅姆姇姈姉姊始姌姍姎姏姐姑姒姓委姕姖姗妍姘姙姚姛姜姝姞姟姠姡姢姣姤姥姦姨姩姪姫姭姮姯姰姱姲姳姴姶姷姸姹姺姻姼姽姾姿娀威娂娃娅娆娇娈姬娉娊娋娌娍娎娏娐娑娒娓娔娕娖娗娘娙娚娛娜娝娞娟娠娡娢娣娤娥娦娧娨娩娪娫娭娮娯娰娱娲娴娽娬娵娶娷娸娹娺娻娼娾娿婀婂婃婄婅婆婇婈婉婊婋婌婍婎婏婐婑婒婓婔婕婖婗婘婙婚婛婜婝婞婟婠婡婢婣婤婥婦婧婨婩婪婫婬婭婮婯婰婱婲婳婵婶婷婸婹婺婻婼婽婾婿媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媑媒媓媔媕媖媗媘媙媚媛媜媝媞媟媡媢媣媤媥媦媧媨媩媪媬媭媮媯嫏媐媰媱媲媳媴媶媷媸媹媻媼媽媾媿嫀嫁嫂嫃嫄嫅嫆嫇嫉嫊嫋嫌嫍嫎嫒嫔嫕嫖嫗嫘嫙嫚嫛嫜嫝嫞嫟嫠嫡嫢嫣嫤嫥嫦嫧嫩嫪嫫嫬嫭嫮嫯嫰嫱嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬂嬃嬄嬅嬆嬇嬈嬉嬋嬌嬍嬏𡢃嬐嬑嬒嬓嬕嬖嬗嬘嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬴㜮嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬳嬵嬶嬷嬸嬺嬻嬼嬹嬾嬿㜷孀孁孂孃孄孅孆孇孈孉孊孋孌孍孎孏安汝娄籹耍肗要邚釹钕</pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>這段程式碼主要完成以下任務：</p>



<ul class="wp-block-list">
<li>讀取 <code>input_file</code> 和 <code>keyword</code> 中的部件。</li>



<li>遍歷 <code>ChineseDictionary</code> 中的所有字元。</li>



<li>檢查每個字元的部件是否包含指定的部件。</li>



<li>將符合條件的字元輸出到 <code>output_file</code>。</li>
</ul>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>篩選文字檔中的差異百分比結果並輸出特定字元</title>
		<link>https://codereview.max-everyday.com/filter_results/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Sun, 23 Mar 2025 13:27:25 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1901</guid>

					<description><![CDATA[本教學將引導您如何使用 filter_res [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>本教學將引導您如何使用 <code>filter_results.py</code> 程式碼，從文字檔中篩選出符合特定條件的行，並提取其中的字元輸出到新的文字檔。</p>



<p>這篇文章是接續處理前一篇的結果, 請參考:</p>



<p>比較字型差異<br><a href="https://codereview.max-everyday.com/compare_fonts/">https://codereview.max-everyday.com/compare_fonts/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">前置作業</h2>



<p>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/filter_results.py">https://github.com/max32002/MaxFontScripts/blob/master/filter_results.py</a></p>



<p></p>



<p><strong>程式碼功能：</strong></p>



<p><code>filter_results.py</code> 是一個 Python 程式，它可以：</p>



<ul class="wp-block-list">
<li>讀取輸入文字檔。</li>



<li>篩選出包含 &#8220;整體&#8221; 且差異百分比小於等於指定閾值的行。</li>



<li>提取篩選出的行中，兩個單引號 <code>''</code> 之間的字元。</li>



<li>將提取出的字元輸出到新的文字檔。</li>
</ul>



<p><strong>使用步驟：</strong></p>



<ol class="wp-block-list">
<li><strong>準備輸入文字檔：</strong>
<ul class="wp-block-list">
<li>將您要處理的文字檔儲存到電腦中。</li>



<li>確保文字檔的內容格式符合程式碼的預期（例如：每行包含 &#8220;整體&#8221; 和差異百分比）。</li>
</ul>
</li>



<li><strong>安裝 Python：</strong>
<ul class="wp-block-list">
<li>如果您的電腦尚未安裝 Python，請先至 Python 官網下載並安裝。</li>
</ul>
</li>



<li><strong>執行程式碼：</strong>
<ul class="wp-block-list">
<li>開啟命令列或終端機。</li>



<li>使用 <code>cd</code> 指令切換到 <code>filter_results.py</code> 程式碼所在的目錄。</li>



<li>執行以下指令，並根據您的需求替換參數： <br><code>python filter_results.py --input &lt;輸入檔案路徑> --output &lt;輸出檔案路徑> --threshold &lt;百分比閾值></code>
<ul class="wp-block-list">
<li><code>&lt;輸入檔案路徑&gt;</code>：輸入文字檔的完整路徑。</li>



<li><code>&lt;輸出檔案路徑&gt;</code>：您希望輸出的文字檔的完整路徑。</li>



<li><code>&lt;百分比閾值&gt;</code>：用於篩選的百分比閾值（預設值為 9.00）。</li>
</ul>
</li>



<li>例如： <br><code>python filter_results.py --input input.txt --output output.txt --threshold 5.00</code> 這個指令會讀取 <code>input.txt</code> 檔案，篩選出差異百分比小於等於 5.00 的行，並將提取出的字元輸出到 <code>output.txt</code> 檔案。</li>
</ul>
</li>



<li><strong>查看輸出結果：</strong>
<ul class="wp-block-list">
<li>程式碼執行完成後，您會在指定的輸出檔案路徑中找到一個新的文字檔。</li>



<li>開啟該文字檔，即可查看提取出的字元。</li>
</ul>
</li>
</ol>



<p><strong>參數說明：</strong></p>



<ul class="wp-block-list">
<li><code>--input</code>：必要參數，用於指定輸入文字檔的路徑。</li>



<li><code>--output</code>：必要參數，用於指定輸出文字檔的路徑。</li>



<li><code>--threshold</code>：可選參數，用於指定篩選的百分比閾值。預設值為 9.00。</li>
</ul>



<p><strong>注意事項：</strong></p>



<ul class="wp-block-list">
<li>如果您不指定 <code>--threshold</code> 參數，程式碼會使用預設值 9.00。</li>



<li>程式碼會將提取出的字元逐行輸出到輸出檔案。</li>
</ul>



<p><strong>範例：</strong></p>



<p>假設您的 <code>input.txt</code> 檔案內容如下：</p>



<pre class="wp-block-code"><code>字元 '一' 的差異百分比：整體 1.27%
字元 '丁' 的差異百分比：整體 2.63%
字元 '七' 的差異百分比：整體 4.46%
字元 '万' 的差異百分比：整體 4.35%
字元 '丈' 的差異百分比：整體 10.35%
</code></pre>



<p>執行以下指令：</p>



<pre class="wp-block-code"><code>python filter_results.py --input input.txt --output output.txt --threshold 5.00</code></pre>



<p><code>output.txt</code> 檔案的內容將會是：</p>



<pre class="wp-block-code"><code>一
丁
七
万</code></pre>



<p>針對 cjktc / cjkjp 字元相比對的結果, 建議設置在 0.9, 因為字元 &#8216;酫&#8217; 的差異百分比：整體 1.00%, 差在&#8221;一&#8221; 在cjk-jp 模式下 是連到底, cjk-tc 模式下 是獨立沒相連.</p>



<p>0.95% 以下相同, 取得的清單如下:</p>



<pre class="wp-block-code"><code>亣产亩亪亱亲亵亸亻亽亾亿仁仃仅仇仌仐仑仒仓仕仗付仜仟仠仡仢代以仦仧仨仩仪们仭仮仲仴仵件仸仹仺仼仾伂伃伄伅伆伇伈伊伋伌伍伏伐休伓伔伕伖优伛伜伞伟传伡伢伣伤伥伦伧伩伪伭伮伯估伱伴伵伷伸伹伺似伽伿佀佁佂佃佄佅但佈佊佋佐佑体佔何佚作佝你佡佣佥佦佧佨佩佪佫佭佰佱佳併佶佸佹使侀侁侇侈侊侎侏侐侓侕侗侙供侠価侢侣侤侥侦侧侨侩侬侭侰侱侳侶侷侸侽侾促俄俇俉俋俎俐俑俓俔俕俖俙俚俛俠俢俣俥俧俨俩俪俫俬俭修俰俱俳俴俶俹俻俾倁倂倃倄倆倈個倎倐們倚倛倝借倠倡倢値倨倬倮倲倳倴倵倶倸倹债值倽倾倿偄偅假偋偍偒偔偘做偝偟偦偩偪偭偮偯偱偳側偵偹偻偼偽偾偿傁傄傆傇傉傊傌傗傞傤傥傦傧储傩傫傮傱傳債傶傷傸傼僀僁僃僅僌僑僒僓僖僗僤僥僨僩僴僵僷價僺僼僽儀儅儊儎儏儑儔儖儘儝儞償儡儥儧儨儩儮儵儶儻儼儽儾元先光兎兏兑兙兛兞兡入內兯兰共兲兴其典兼兽兿冁冂冃冄内円冈冉冊冋册再冐冓冔冕冖冗冘冚军农冝冟冠冣冦冧冨冩冫冭冮冰冲况冻冼冽冿净凁凂凅凇凍凎凒凓凙凚凞几凡凢凣凥処凧凨凩凪凫凬凯凱凲凴凸凹击凿刂刅刈刉刊刋刌刍刎刏刐刑划刔刖则刚创刜刞刟删刡刣別刨刪刬刮刯刲刴刵制刷刹刽刾刿剂剄剅則剈剉剋剌剎剐剑剒剓剔剕剗剘剚剞剟剢剣剥剦剧剫剬剮副剰剱剴剸剻剼剾剿劁劃劅劆劌劎劏劒劓办加务劢劦劧励劲劳労劶劷势勂勄勈勎勑勖勗勚勛勡勦勪勫勭勯勲勳勹勺勻勼勽匂匃匆匇匉匍匐匛匞匢匦匨匩匮匷十卂千卄卅卆升午卉半卋卍华卐卓協单卖南単卜卝卟占卢卣卤卨卩卪卫卭危卲卶卹卽厀厁厂厃厄厅历厇厈厉厊压厌厍厏厐厑厒厓厕厖厗厘厙厛厝厠厡厣厤厧厪厬厯厱厳厵厼厾县叆叇友双反叏叐发叓叔叕取受变叚叜叞叢口古另叧叩召叮可叱右叴叶司叹叼叽叾叿吀吁吃各吅吆吇吉吊吋同名吐向吔吕吖吘吙吚君吜吞吠吢吣吥否吧吰吲吴吶吷吺吽吿呁呃呄呅呇呉告呋呌呏呐呑呒呓呔呖呗员呚呛呜呝呞呠呣呥呩呪呫呬呮呯味呴呵呷呹呺呻呼呾咀咁咂咃咆咇咉咊咋和咎咏咐咑咒咔咕咖咗咘咚咛咝咞咟咣咧咭咮咯咰咱咵咶咷咸咺咻咼咿品哃哄哅哆哇哉哊哋哌响哏哐哑哒哓哔哕哖哗哘哙哚哛哝哞哟員哢哣哦哧哩哫哬哭哯哰哴哵哶哷哹哺哻哽哾哿唀唂唃唄唈唊唋唎唏唑唒唓唔唕唖唘唙唚唛唝唟唠唡唢唣唤唦唨唩唭唰唱唶唺唻唿啀啅啈啉啋啌啎問啒啔啕啙啞啠啢啤啥啧啨啩啪啫啬啭啮啯啰啱啲啴啵啶啷啹啺喅喆喊喌喎喐喕喖喗喘喛喜喠喡喣喤喥喦單喯喱喷喸喹喽喾嗇嗊嗍嗙嗚嗟嗠嗢嗣嗤嗥嗦嗧嗨嗪嗫嗮嗯嗰嗳嗴嗺嗻嘀嘁嘂嘃嘈嘊嘎嘏嘓嘕嘖嘘嘙嘚嘝嘟嘠嘡嘢嘣嘤嘥嘦嘧嘨嘪嘫嘭嘯嘱嘳嘵嘹嘺嘻嘼嘽嘾嘿噁噈噉噊噐噑噕噖噘噚噛噜噟噣噦噧噩噮噰噴噷噹噻噼嚇嚈嚉嚊嚋嚍嚎嚏嚐嚑嚕嚖嚗嚚嚛嚜嚞嚠嚡嚣嚤嚪嚰嚴嚸嚺嚻囀囂囄囆囇囍囏囒囔囕囗囘囙回团団囨囩囪囫园囯囲围囵囸固囻囼国图圃圄圅圆國圌圎圏圐圑圓圔圕圖圗團圙圚土圠圡圢圥圧在圩圪圫圭圮圯圱圲圵圶圷圸圹圼圽圾址坂坃坄坆坈坉坍坏坐坓坔坕坖坘坙坚坛坜坝坠坡坣坤坥坦坧坩坪坫坬坰坲坶坷坸坺坿垀垁垄垆垇垈垉型垌垍垎垏垐垑垒垖垘垚垝垟垡垣垥垦垩垪垫垬垭垯垰垱垲垳垴垶垷垹垺垻垼垾垿埀埂埄埅埆埇埉埊埋埍城埐埓埔埕埘埙埛埜域埠埡埤埨埪埫埬埮埯埱埲埸基埼埽埿堁堂堇堊堋堌堍堏堐堑堓堕堖堗堘堚堛堜堝堢堥堫堭堮堯堳場堷堸堹堺堻堼堾塁塂塄塆塇塎塓塖塜塝塠塡塢塤塥塦塨塩塪塬塯塰塱塲塴塷塻塼塽墁墄墅墍墎墐墑墕増墘墙墛墝墠墤墥墧墬墭墰墲墳墴墷墹墻墿壀壃壆壋壎壐壔壗壛壡壥壦壧壨壪士壭壮壯声壱売壴壵壶壷壸壹壺壻壼壽夀夁夂夃处夆备変夊夘夙多夛夞夥夦大夫夭夰失夲夳头夵夶夹夺夻夼夾奀奁奂奃奅奆奇奊奋奌奍奎奔奖奛奡奣奤奦奨奩奭奯奰奺妆妇妕妛妜妩妪妭姂姕姗姢娅娆娇娐娔娝娢娦娯娰娱娴娺娻婎婏婳婵婶媀媅媇媉媍媘媣媨媭嫅嫐嫒嫔嫧嫱嫼嬄嬆嬒嬘嬜嬩嬳嬵嬶嬷嬹嬺嬻孂孉孒孓孙孞孠孢孧孪孯孲孴孹孻孾宒实宠审宣宧宪宫宻宽宾寈寊寋寕寣寷寸对寻导尀封専尅專尌小尔尕尗尘尙尚尛尝尞尡尣尤尥尧尨尩尪尫尮尯尴尶尷尹尻尽局层屃屇屉届屌屐屒屓屖屗屘屙屚屛屝屟屣屦屩屪屫屭屲屴屵屶岀岁岂岃岄岌岎岕岖岗岘岜岝岢岧岩岲岸岹岻岽岿峀峁峄峉峍峎峕峚峜峝峞峠峢峣峤峧峩峫峲峳峷峼峾崀崂崃崄崅崈崉崊崓崖崜崡崪崬崭崮崱崶崺崻崽嵀嵂嵄嵅嵓嵗嵘嵙嵚嵛嵝嵦嵮嵳嵵嵿嶃嶉嶌嶎嶏嶐嶑嶖嶘嶚嶡嶣嶥嶦嶨嶭嶳嶻嶿巀巄巅巈巊巋巌巓巔巖巙巛巜川巠巢巣工左巪巫巬巭差己已巳巴巶巷巺巻巼巾巿帀币布帄帅帆帇师帊希帍帎帏帐帒帓帔帕帖帗帙帚帛帜帞帡帢帣帥带帧帪師帬帯帱帲帴常帹帺帻帼帿幀幁幂幅幆幇幈幉幊幌幍幏幑幒幓幖幗幘幙幚幝幠幥幦幩幫幬干平幷庂庅庆庉庍庐庑庒库应庘庝庞废庡庣庩庯庰庴庺庻庼廀廄廅廇廍廦廨廪廭廯廵廽廾廿开异弉弋弌式弐弖张弡弪弫弬弳弹弾彁彅彋彏彐归当录彚彛彠彡形彧彨彩彬彭彮彳彴彵彶彺彼征徂徃徆徊徍徎徏徑徒従徔徕得徙徚徛徠徢徣徥徦徨徰徱徲徴徺徻徾忀忁忂忄忆忇忈忊忋忎忏忐忓忔忕忖忚忡忣忤忥忦忧忨忬忮忰忱忲忷忸忹忾怀态怂怃怄怅怆怇怈怉怊怍怐怑怔怕怖怗怘怙怚怛思怞怟怢性怨怪怬怭怮怰怲怳怴怶怷怸怹怺总怼怽怾怿恀恂恄恊恌恍恎恑恒恓恖恘恛恜恞恠恤恦恪恫恭恲恳恴恵恶恸恹恺恻恼恽恿悀悇悈悍悏悐悑悒悓悕悗悚悝悡悧悩悪悫悬悭悮悯悱悲悶悹悺悼悿惀惁惈惉惍惎惏惐惑惒惕惖惜惠惣惤惥惦惧惩惪惫惬惭惯惱惲想惴惶惺惻惿愂愄愅愆愊愋愐愑愓愗愘愞愠愡愣愤愥愦愩愪愭愯愰愲愳愺愼慂慍慏慐慑慒慔慖慗慛慟慡慣慩慬慯慱慲慹慽慿憅憆憇憈憉憍憑憒憕憗憘憙憚憛憜憠憢憣憥憦憪憭憰憱憳憷憽懈懎懑懓懔懙懛懝懟懠懡懣懤懪懫懰懱懳懴懹懺戂戃戅戆戈戊戍戏成我戒戓戔戕或戗战戙戛戜戝戞戟戢戦戨戬戭戯戰戱戴户戸戼扅手扎扏扐扗扙扛扜扝扞扢扣扤扦执扩扪扫扬扭扯扰扳扴扷扸扼技抂抇抈把抋抌抍抐抒抔抙抚抛抜抝択抟抠抡抢抣护报抦抧抩抪抯抰抲抴抶抷抸抹抺抻押抽拁拃担拈拊拋拍拐拑拔拘招拝拞拟拠拢拣拤拥拦拨择拪拫括拭拮拱拲拶拹拺拼拽挂挅挆挊挌挎挏挑挔挕挗挙挚挜挝挟挠挡挢挣挥挦挫挬挭挮挰挱挳挴挵挶挸挹挽挾挿捀捃捅捇捈捉捌捍捏捒捔捕捖捙捚捛捜捝捞损捡换捣捪捫捭据捯捰捱捳捵捹捾掆授掉掌掎掑排掕掗掛掝掣掦措掱掲掳掴掵掶掷掸掹掺掻掿揀揁揅揇揊揋揌揍揔揘揚揞揢揣揤揦揧揨揬揮揰援揶揷揺揽揾揿搀搁搂搃搄搅搆搈搊搌損搑搓搕搙搝搟搱搵搷搹搻搼摀摁摂摃摄摅摆摇摈摉摊摌摍摐摑摕摖摗摚摜摢摣摤摥摨摪摫摬摱摲摵摶摷摼摾摿撀撁撂撄撆撉撊撋撌撎撏撑撓撖撜撟撠撢撣撧撪撵撷撸撹撺擀擆擈擉擋擌擏擓擜擝擞擟擣擤擪擫擳擵擶擷擹擼攀攂攅攋攌攎攒攕攚攩攬攰攲攳攵攸攻攼政敀敁敄故敆敇敋敌敎敒敓敔敕敗敚敛敟敠敡敢敤敥敧敨敪敭敮敯敱敳敶敹敻敼敽敾敿斀斆斋斍斏斓斔斗斘斚斛斝斞斣斨斩斪斶斺斻旀旇旑旝旤日旦旧早旪旭旮旯旰旱旳旴时旷旸旹旺旾旿昀昁昄昅昇昌昍明昒昔昗昘昙昚昛昜昝星昦昧昨昩昫昭昮是昰昲昳昷昸昹昺昻昽显晀晄晅晆晇晋晍晎晐晑晒晓晔晕晖晘晚晛晝晞晟晡晩晪晫晱晵晶晷晸晹智晽晿暁暂暅暇暉暊暏暑暒暓暔暕暖暘暛暞暢暣暤暥暦暧暪暬暯暰暶暷暸暺暿曅曉曊曋曍曐曑曓曔曕曗曙曛曡曢曥曭曮曱曲曳曶書曹曺曻曽朄朇月朋服朑朒朚朝期朢朤木未末札术朰朱朲朸机朻朾朿杀杂杄杅杆杉杌材村杒杕杖杘杙杚杛杜杞束杠条杣来杦杫杬杮杯東杵杸杹杺杼杽板极枂枃枅枈枉枊枎枏枓枖枘枙枚果枞枟枠枡枣枤枥枧枨枪枫枬枭枮枯枳枴枷枸枹枺枽枾枿柀柄柇柊柌柎柏柑柕柖柘柙柚柛柜柞柠柡柣柤柦柨柪柫柬柯柵柶柷柺査柽柾栀栄栅栆标栈栉栊栋栌栍栎栏栒栕栖栘栜栝栠栢栣栤栧株栭栰栱栶样栺栻格栽栿桁桂桄桅桋桏桐桒桓桔桖桗桘桚桛桜桞桟桠桡桢档桤桥桦桨桩桪桬桮桯桱桳桶桷桸桺桻桽桾桿梀梂梇梉梌梑梖梗梘梙梚梛梜梞梠梩梫梬梮械梷梸梺梻梽梿检棁棂棃棅棉棋棏棑棘棙棚棛棝棞棟棢棤棥棧棩棫棳棵棶棹棾棿椅椇椏椐椑椔椖椘椙椚検椝椞椟椠椢椣椤椥椩椫椬椭椮椯椰椱椵椷椺椼椾楁楃楅楇楊楋楍楎楏楐楒楕楖楙楝楟楣楧楨楩楳楻楽楾楿榀榃榄榅榈榉榋榌榏榐榓榚榝榞榢榥榧榪榬榭榲榳榵榶榸槄槇構槎槑槒槓槔槕槖槗様槚槛槜槝槟槠槡槫槭槰槲槶槽槿樄樅樈樉樌樍樎樐樔樖樘樜樠樢樣樤樦横樬樭樮樯樰樱樲樳樶樷樹樻樼樿橂橄橇橈橊橋橌橍橑橗橚橜橝橞橣橥橨橬橭橮橰橲橴橵橶橸橹橺橻橽橿檅檆檈檉檊檋檏檔檘檙檚檞檟檣檥檩檪檭檮檲檵檷檹檺檻檿櫀櫄櫅櫇櫈櫍櫎櫑櫒櫕櫗櫚櫠櫣櫥櫦櫩櫭櫮櫯櫴櫵櫷櫼櫾櫿欀欁欇欉欌欍欎欓欔欕欖欘欙欛欜欢欥欦欩欪欫欭欮欰欱欳欴欼歀歂歄歏歕歗歚歞止正武歨歩歪歫歮歱歳歵歶歸歹歼歽歾歿殀殂殇殉殊殐殑殒殓殘殚殜殝殞殟殡殣殤殫殬殭殱殲毂毊毎毐毑毕毙毛毜毝毠毡毢毤毥毧毨毩毪毭毮毰毱毲毴毶毷毸毺毽氃氄氆氇氋氌气氕氖気氘氜氝氞氢氤氥氩氫氬氭氱氳氵氷永氺氻氼氽氾氿汀汁汄汅汇汈汉汌汏汐汓汔汖汗汘汙汜汞江污汢汣汥汨汪汫汬汭汮汱汲汳汷汻汼汽汿沀沃沅沋沎沐沑沒沓沕沖沗沚沛沝沞沠沣沤沥沦沧沫沬沮沯沰河沵沷油沺沼沽沾泀況泂泃泆泇泈泉泊泋泍泎泐泔泘泞泟波泤泦泩泪泭泳泴泵泶泷泸泹泺泼泽泾泿洁洂洄洅洆洈洉洌洍洎洏洐洑洒洓洔洕洗洘洙洠洡洢洣洤津洦洩洪洫洬洭洵洷洸洹洺活洼浀浂浃浄浆浇浈浉浊测浌浍浏浐浑浒浓浔浕浖浗浝浞浟浠浢浦浧浨浩浫浬浭浰浲浶浹浺浼浾浿涀涁涃涄涅涆涇涋涌涏涐涑涒涔涚涜涝涞涟涠涡涢涣涤涥润涧涩涭涮涯涰涱涶涷涸涺涻涾淁淂淄淇淉淏淐淔淖淛淜淟淠淢淣淧淵淶淸淺淿渀渁渂渃渄渆渇渉渊渋渌渍渎渏渐渑渒渓渔渕渖渘渚減渞渦温渪測渰渱渽渾湁湂湄湅湆湈湍湎湏湐湕湗湘湙湞湟湡湢湦湩湪湬湭湯湰湴湵湶湷湹湺湼湽湿満溁溂溃溄溅溆溇溊溋溌溎溑溒溔溕溝溞溠溣溤溨溩溫溬溭溮溰溳溷溸溹滆滉滍滒滖滗滜滟滠滣滤滥滧滨滩滰滳滷滿漀漁漃漄漅漇漋漌漍漎漕漗漙漜漝漞漟漡漧漨漬漴漷漹漺漽潀潂潄潆潇潈潊潋潌潍潏潐潕潚潞潤潥潦潧潩潪潬潭潮潯潰潱潵潶潹潽潿澁澃澅澆澉澏澑澒澗澘澙澛澜澢澥澩澫澭澴澿濁濆濇濊濋濌濎濏濐濒濖濗濜濝濞濣濤濥濧濲濶濹濺濻濽濿瀂瀃瀈瀎瀐瀒瀓瀔瀤瀥瀨瀬瀭瀮瀱瀶瀸瀻灁灂灅灇灍灎灏灒灗灙灚灛灟灠灢灦灧灨灪灬灭灲灳灴灻炇炈炋炌炍炐炓炜炝炞炢炣炪炰炲炶点為炿烁烂烃烅烆烉烌烏烒烛烣烥烦烧烨烩烪烫烬热烮烲烴焁焃焄焈焎焏焑焒焔焕焖焘焟焤焧焨焪焬焭焷焹焺焻焽焿煂煄煈煍煏煔煕煘煛煟煦照煭煮煯煰煴煹煼煿熁熂熃熋熍熏熓熕熙熦熫熶熹熼熽燆燌燍燗燣燤燨燯燳燷燺燾爃爄爅爈爋爏爑爒爘爜爞爠爡爣爧爩爮爱爳爴爷爹爺爻爼爽爾牀牁牂牃牆牊牍牎牑牔牛牜牞牡牤牧牪牫牬牭牮牯牰牱牲牳牵牶牺牼犁犂犃犄犅犆犇犊犋犌犎犏犐犓犔犙犜犝犞犠犡犫犬犭犮犲犳犴犵状犺犻犼犾狂狃狅狆狇狈狌狍狎狏狓狗狙狚狛狜狝狟狢狣狤狥狦狧狨狪独狭狮狰狲狵狶狸狹狽猀猁猂猃猆猈猉猌猍猎猓猖猗猘猚猟猡猧猩猪猭猯猳猼獁獂獃獅獆獋獑獔獕獖獛獝獟獠獢獣獤獥獨獩獬獭獮獯獳獸獹獺玁玉玊王玌玍玎玑玒玔玕玖玗玘玙玝玞玤玥玨玫玬玮环现玱玳玴玵玶玷玸玺玻玾玿珀珂珃珄珅珇珈珊珌珏珐珑珒珔珖珘珙珚珜珟珠珣珦珨珩珪珬珯珰珱珲珳珴珵珶珷珸珺珼珿琁琈琋琍琎琏琐琒琕琖琗琘琙琚琜琝琞琟琠琡琣琦琧琩琪琲琳琶琸琻琽琾琿瑁瑂瑆瑈瑉瑊瑌瑒瑓瑔瑕瑘瑙瑝瑞瑡瑥瑦瑪瑬瑳瑴瑵瑷瑸瑺瑻瑼瑽瑾璂璄璅璊璌璎璐璑璓璔璕璗璙璚璛璝璢璤璫璳璴璶璸璹璼璽璾瓃瓄瓇瓉瓍瓎瓑瓒瓕瓙瓩瓪瓭瓳瓹甉甊甖甘甙甛甞生甠甡甦甧用甫甬甮由甲申甴电甶男甸甼甽甾畀畁畂畄畇畈畉畊畋界畎畐畓畔畕畘畞畠畣畦畧畨畫畮畱畳畵當畷畸畺畼畽畾疀疂疃疅疇疈疊疋疍疐疖疗疘疞疟疠疡疦疧疨疬疭疮疯疶疷疻痉痋痐痖痥痨痪痫痭痶痸痻痽瘅瘆瘎瘗瘚瘪瘫瘬瘮瘶瘷瘽瘾瘿癍癏癐癔癛癝癞癠癣癦癫癳癵癶癷癹発白百皁皃的皅皇皈皋皌皏皑皒皓皔皕皗皘皛皞皟皢皣皧皨皩皮皯皱皲皳皵皸皹皺皼皾皿盀盁盂盃盄盇盋盌盏盐监盓盕盖盗盘盚盛盞盟盡盢監盨盪盬盯盰盱盵盷相盺盽盿眀眂眃眈眉眊看眍眎眏眐眑眒眓眖眗眘眚眛眜眝眞眡眢眣眦眧眪眫眬眭眮眰眱眲眴眵眺眻眿睁睅睈睉睋睌睍睎睐睑睓睔睗睚睝睞睤睥睫睯睰睱睲睳睴睵睶睸睺睻睼瞀瞁瞆瞉瞊瞏瞐瞒瞓瞔瞖瞗瞛瞞瞠瞡瞣瞤瞦瞨瞩瞫瞭瞮瞯瞰瞲瞶瞷瞸瞹瞺瞽矀矁矄矆矈矊矎矑矖矘矛矠矢知矨矪矫矬矯石矴矵矶矷矸矻矼矽矿砀砃砄砅砆砇砈砊砋砐砓研砕砖砗砚砛砜砞砟砠砡砢砤砧砩砪砫砯砳破砵砶砷砸砺砻砼砽砾硁硃硄硅硆硇硈硉硊硋硌硍硎硏硐硒硓硔硕硖硗硘硙硚硛硜硟硢硣硤硦硧硨硩硪硬确硯硰硱硲硳硵硶硷硸硼硽碁碄碅碈碊碋碍碏碐碒碔碕碖碘碙碛碜碝碞碠碢碦碧碩碫碬碭碮碯碱碵碷碹碼碽磀磂磄磆磋磒磙磚磜磞磠磢磣磥磦磧磩磫磮磰磱磴磵磸磹磽磾礀礂礃礄礅礇礈礉礊礋礍礏礑礒礓礔礕礖礗礘礛礝礟礢礣礥礧礨礰礲礷礸礹祃祌祍祎祒祙祣祦祬祮祯祰祱祴祵祶祽禆禇禈禉禐禒禗禚禞禟禣禥禬禵禶禼禾秂秃秆秉种秐科秓秗秙秛秝秞租秡秣秥秨秩秬秮积秱秲秳秴秵秷秸秹移秼秽秾秿稀稆稈稉稏稐稒稓稖稗稘稝稞稢稣稤稥稩稪稫稬種稲稳稶穁穂穆穌積穏穐穑穒穓穗穘穙穚穛穞穡穢穤穦穪穭穯穱穳穷穼窂窎窚窜窡窤窥窦窧窹窽竆竐竔竖竘竞竤竮竲竳竵竹笁笂笃笍笕笖笗笚笝笡笶笷笺笼笽笾笿筁筄筓筗筙筚筛筜筞筣筨筪筫筸筺筼签简箁箂箃箓箣箥箦箧箨箩箳箶箺箻箽箿篂篃篈篍篑篖篘篞篢篮篯篵篶篻篽篿簈簖簗簘簚簝簤簮簯簲簴簵籁籋籎籒籞籡籢籨籱籶粂粋粎粏粓粙粛粜粝粠粪粫粬粭粵粶粷粸糁糃糄糆糐糛糡糣糤糥糦糩糳糹紌紎紤紧紩紴紶紷紸絉絊絔絠絤絫絬絭絯絴絷綀綄綇綊綐綒綕綡綤綨綼緁緈緔緟緷緸緼緽緾緿縂縆縇縓縙縚縤縰縴繀繂繉繏繑繛繠繣繤繬繱繴纄纅纙纟纠纡红纣纤纥级纩纪纫纬纭纮纰纱纲纴纵纶纷纹纻纽纾线绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳绵绶绷绸绹绺综绾绿缀缁缂缃缅缆缇缈缉缊缋缌缍缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缵缼罂罆罊罓罖罗罘罙罚罝罟罡罢罣罤罧罩罪罫罬罭罯署罳罴罵罶罺罼羁羄羇羈羌羍羓羔羘羙羛羞羟羠羣群羥羨義羬羱羷羼習翓翘翚翶翼耂者耇耈耉而耏耐耑耒耓耙耚耜耞耟耡耣耤耧耫耭耲耴耵耶耸耻耼耽聀聁聂聄聅聇聉聋职聍聏聐聒聓聕聗聙聝聟聠聥聦聩聪聫聮聵聺聼聿肀肁肅肈肉肊肍肏肐肑肔肤肨肰肳肻肾肿胁胉胋胑胓胟胢胣胧胪胫胷胾胿脄脏脑脜脦脨脪脳脴脵脶脸脻腀腁腄腅腖腗腘腝腣腨腪腵腻腽腾膑膒膔膡膤膧膫膭膯臋臐臓臔臜臦臩自臮臱舆舎舓舕舙舣舤舧舱舻艁艊艌艍艰艳艵艼芁节芅芆芈芉芌芕芖芗芜芞芵苁苃苅苆苇苉苋苌苎苖苚苝苩苲苵苸苼茊茍茏茐茑茒茓茔茕茙茟茠茥茦茮茻茾茿荁荆荋荕荘荙荚荛荜荝荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮荰荲荴荹莁莄莋莐莗莟莡莤莮莯莱莲莳莵莶莹莺莼菄菋菐菒菓菗菚菦菷萀萂萈萚萝萞萤营萦萨萪葁葏葪葻蒃蒅蒇蒉蒕蒥蒵蒷蓃蓕蓘蓝蓟蓠蓣蓥蓦蓵蔁蔛蔶蔷蔹蔺蔼蕐蕜蕲蕴薒薥薫薬薭薲薻藊藌藓藔藛藧藵蘃蘈蘎蘒蘕蘝蘫蘽虄虉虊虏虑虗虘虚虝虠虦虬虮虲虳虵虶虷虹虺虼虽虾虿蚀蚁蚃蚅蚆蚋蚎蚑蚖蚛蚝蚞蚟蚠蚥蚦蚨蚩蚪蚫蚬蚭蚮蚱蚲蚵蚷蚹蚺蚻蚼蚾蛁蛃蛅蛆蛈蛊蛋蛍蛎蛏蛐蛒蛓蛕蛗蛘蛙蛚蛛蛜蛝蛞蛢蛣蛨蛬蛰蛱蛲蛳蛴蛵蛶蛹蛺蛼蛽蛾蛿蜀蜁蜂蜅蜆蜊蜔蜖蜘蜚蜛蜝蜞蜠蜡蜤蜦蜨蜪蜫蜭蜮蜱蜳蜴蜵蜶蜸蜹蜾蝀蝁蝃蝄蝅蝈蝌蝏蝐蝖蝗蝜蝞蝠蝢蝥蝦蝩蝪蝫蝭蝰蝲蝷蝸蝻蝽蝾蝿螀螄螅螈螊螋螐螒螙螜螞螡螤螦螧螨螬螱螳螴螷螸螹螼蟅蟇蟈蟊蟍蟎蟐蟑蟔蟕蟗蟘蟚蟛蟜蟞蟟蟩蟬蟱蟲蟳蟴蟶蟷蟸蟹蟻蠇蠈蠋蠌蠎蠏蠒蠚蠠蠧蠩蠫蠯蠱蠴蠷蠹蠺蠽蠾蠿血衃衄衇衉衍衎衐衔衕衖街衘衜衝衞衟补衦衧衬衭衳衴衶衸衺衼袃袄袅袆袊袌袎袏袑袓袔袡袣袥袦袧袩袬袭袯袳袸袹袻裇裈裉裚裢裣裤裥裦裩裪裫裭裮裿褀褃褅褈褑褔褛褣褤褨褭褯褴褹褿襇襈襋襎襓襕襝襧襨襩襰襵襶襸覂覄覌覍覎規覐覒覔覗覘覞覟覡覥覨覫覬覭覯覰覲覻覼覽见观规觅视觇览觉觊觋觌觍觏觐觑角觔觕觗觛觟觡解觥触觧觨觩觪觫觬觭觮觯觰觱觲觴觶觷觸觺觻觼觾訆訋訍訚訜訨訩訮訰訲訸詂詄詊詌詚詟詨詪詯詸詽誁誊誎誔誛誱誵誺誽諀諁諅諎諘諙諣諥諨諩諯諹諻諽謃謈謓謘謢謩謮謲謴謶謺謿譇譊譋譠譡譤譧譮譳譵譻讆讇讑讗讠计讣认讥讦讧讨让讪讫讬议记讱讲讳讴讵讶许论讻讼讽设诀证诃评诅识诈诉诊诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜诞诟诠诡询诣诤该详诨诪诫诬误诱诲诳说诵诶请诸诹诺读诽课诿谀谁调谄谅谆谇谈谉谊谋谌谍谏谑谒谓谖谗谘谙谚谛谜谞谟谠谡谣谤谥谦谧谨谩谪谬谭谮谯谰谱谲谳谴谵谼豀豄豇豍豎豐豒豓豜豝豞豠豣豥豧豨豭豮豲豴豵豶豷貄貈貏貑貚貝貞負財貢貣貥貦販貫責貮貰貱貳貴貵買貸貹貺貼賀賆賉賌賎賏賐賔賗賘賚賜賞賟賢賣賤賥賦賩賫賮賯賱賴賵賶賷賹購贁贂贎贐贑贒贔贕贘贚贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赦赫赬赮赯走赲赵赶赸赻赼赾趀趂趃趄超趆趇趈趉趋趌趍趏趒趕趖趗趘趚趛趝趞趠趡趢趤趧趨趫趬趭趰趱足趷趸趺趻趾跀跁跂跃跄跉跊跋跌跍跏跑跒跓跔跕跖跗跘跙跚跛跞跠跥跦跧跩跪跬跭跮跰跴跷跸跹跼跾跿踀踁踈踊踎踏踐踑踓踔踕踖踚踝踞踟踢踤踦踧踨踩踫踬踮踯踲踵踶踹踺踻踼踾踿蹃蹉蹑蹒蹓蹖蹘蹚蹝蹟蹣蹤蹦蹧蹪蹫蹮蹰蹻蹽蹾蹿躀躅躈躊躎躏躖躗躛躜躟躣躦身躭躮躯躱躳躵躸躺躾軁軆軇軋軌軍軎軏軐軑軒軓軕軖軗軙軚軛軜軝軞軣軤軥軦軩軬軯軰軲軳軴軵軷軸軹軺軻軼軽軾軿輀輁輂輄輅輆輇載輋輌輍輏輑輒輓輔輕輚輛輜輟輠輢輧輩輫輰輱輲輺輼輽轀轈轉轌轎轑轒轖轙轚轛轞轟轠车轧轨轩轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼轾轿辀辁辂较辄辅辇辈辉辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辩辪辫辬辵过这进远违迟迧迳逇选逊逥逫逰逺遀遈遗遚遟遪邒邓邔邕邖邗邘邚邛邜邝邞邟邢邤邧邩邫邬邭邮邯邵邷邹邺邻邼邽邾郀郂郆郇郉郋郌郍郏郐郑郓郕郖郗郘郙郚郝郟郠郡郢郣郥郧郫郮郱郲郳郴郸郹郻都郿鄄鄆鄇鄉鄊鄎鄒鄓鄔鄖鄛鄞鄥鄨鄩鄪鄱鄲鄷鄻鄼酂酆酇酔酝酦酭酱酽酾酿醈醔醖醗醤釆采釈释重野釒釕釛釡釨釫釲釳釴釺釼鈃鈈鈙鈛鈝鈟鈠鈡鈪鈫鈬鈲鈻鈽鉃鉇鉌鉓鉔鉕鉙鉟鉣鉨鉪鉬鉭鉲鉳鉴銁銄銆銌銐銒銔銝銞銟銢銦銬銭銰銱銴鋉鋔鋖鋚鋛鋞鋢鋦鋫鋱鋴鋵鋾錁錃錅錇錊錋錌錎錑錒錗錛錜錰錱錷錸錻錽錾錿鍀鍂鍅鍌鍎鍓鍙鍟鍡鍢鍯鍲鍷鍸鍹鎃鎄鎅鎆鎇鎑鎙鎠鎢鎯鎱鎷鎸鎽鎾鎿鏀鏅鏒鏔鏚鏛鏣鏩鏪鏫鏭鏯鏰鏲鏳鏴鐀鐅鐆鐑鐛鐜鐝鐟鐠鐡鐢鐣鐤鐧鐨鐬鐾鑆鑇鑋鑍鑎鑔鑖鑘鑙鑚鑜鑥鑦鑩鑳鑸鑺鑻钂钄钅钆钇针钊钋钌钍钎钏钐钑钒钓钕钖钗钘钚钛钜钞钟钡钢钣钤钥钦钩钬钭钮钯钰钱钲钳钴钵钶钷钸钹钻钼钽钾钿铀铁铂铃铄铅铆铇铈铉铊铌铍铎铏铐铑铒铓铔铕铗铘铙铚铛铜铝铞铟铠铡铢铤铥铦铧铨铩铪铬铭铮铯铰铱铲铳铴铵银铷铸铺铻铼铽链铿锁锂锃锄锆锇锈锉锊锋锌锑锒锓锔锖锗锘错锚锛锜锝锞锠锡锢锣锤锥锦锧锪锫锬键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镄镅镆镈镉镊镌镍镎镏镐镒镓镔镕镖镗镘镙镚镛镝镠镡镢镣镤镥镧镨镩镫镬镭镮镯镰镲镳镴镵镶镺镻镼镽长門閂閄閅閆閇閈閉閊開閏閐閒間閕閗閚閛閜閟閠閥閧閨閩閪閮閯閰閲閳閴閵閸閾闁闂闅闊闎闏闓闖闘闙闚闛闠闡闣闦闧闩闪闫闬闭问闯闰闳间闶闷闸闹闺闼闾闿阀阁阃阄阅阇阈阉阊阋阍阎阏阐阔阖阗阘阜阝阞队阠阡阣阥阦阧阨阩阪阭阯阱阳阴阵阶阷阻阼阾阿陂陃附际陆陇陈陉陌陎陑陒陓陕陘陙陚陜陝陞陠陡陣陧陨险陭陯陳陴陹険陻陽陿隀隄隌隍隑隒隓隕隖隚隝隟隢隤隫隬隭隯隲隵难隿雃雈雏雐雓雔雠雤雥雦雧雫雬雭雮雼雾霁霊霌霕霗霚霭霳霷霻霼靅靎靐靑青靓靔静面靣靤靥靦靧革靪靬靯靰靱靵靶靸靹靺靻靼靾鞀鞁鞂鞆鞇鞈鞉鞊鞋鞌鞎鞐鞒鞓鞔鞕鞗鞛鞜鞝鞞鞡鞤鞥鞧鞪鞮鞯鞰鞷鞺鞼鞽韀韁韊韏韒韕韚韛韟韢韣韥韦韩韪韬韭韯韱韹韼韾頁頂項順頇須頉頊頋頍預頔頕頗頚頝頟頡頢頥頧頩頪頬頭頮頰頱頳頴頵頶頸頺頼顀顁顂顆顉顊顋題顐顑顓顕顖顗願顚顝顡顣顤顨顩顭顮页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颠颡颢颤颥颦颧颪颫颰颵飅飍飏飒飖飗飘飚飜飞飤飨飮飷飸飿餁餄餋餍餏餠餶饄饏饚饣饤饥饧饩饪饫饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕首馗馘馝馠馢馩馪馬馮馯馱馴馵馷馹馺馽馾駀駁駄駆駇駈駉駊駋駎駒駔駕駗駙駛駞駟駠駡駤駥駦駧駨駫駯駳駴駶駷駸駺騀騇騈騍騑騒験騖騛騜騝騟騡騢騦騧騨騳騵騶騷騹騺騻騿驌驍驐驑驒驓驕驙驜驝驞驡驣驫马驯驰驲驴驵驶驷驹驺驻驽驾驿骀骁骂骃骄骅骉骍骎骏骐骑骓骔骘骙骚骛骜骝骞骠骡骢骥骩骬骮骵髃髄髈髉髊髚髝髨髸髼鬇鬑鬓鬡鬤鬥鬦鬨鬪鬰鬶鬸鬽魉魓魗魚魜魝魟魢魣魥魧魩魬魰魱魲魳魶魸魹魺魻魼魽鮂鮇鮈鮉鮊鮋鮌鮍鮎鮏鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮠鮢鮣鮥鮦鮩鮭鮮鮯鮰鮲鮳鮴鮶鮺鮼鮽鮿鯁鯂鯃鯅鯆鯈鯉鯋鯌鯎鯏鯐鯑鯒鯔鯕鯗鯙鯝鯟鯠鯡鯣鯧鯩鯬鯭鯯鯳鯶鯹鯻鯼鯾鰁鰂鰃鰄鰉鰊鰎鰏鰑鰔鰕鰖鰙鰛鰞鰟鰠鰢鰫鰮鰳鰴鰸鰽鰿鱂鱃鱄鱊鱎鱐鱑鱓鱘鱙鱚鱝鱥鱧鱩鱫鱬鱯鱶鱷鱻鱼鱾鱿鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲌鲍鲎鲏鲐鲑鲒鲓鲔鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲳鲵鲶鲷鲸鲹鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳊鳋鳌鳍鳎鳏鳐鳒鳓鳔鳕鳖鳗鳘鳛鳜鳝鳞鳟鳠鳡鳢鳣鳤鳥鳦鳧鳨鳫鳬鳭鳮鳯鳱鳲鳳鳴鳶鳷鳸鳺鳻鳼鳽鳾鳿鴀鴁鴈鴊鴍鴎鴏鴐鴑鴓鴔鴖鴙鴚鴜鴝鴠鴡鴢鴣鴤鴧鴨鴩鴫鴬鴭鴮鴯鴰鴲鴶鴸鴹鴻鴼鵂鵋鵌鵍鵏鵐鵕鵘鵙鵛鵝鵞鵟鵡鵢鵣鵤鵦鵧鵨鵫鵬鵭鵮鵯鵲鵶鵸鵹鵿鶀鶁鶂鶅鶆鶇鶋鶍鶏鶑鶒鶗鶝鶢鶤鶥鶨鶩鶪鶫鶭鶰鶳鶵鶶鷆鷌鷎鷑鷘鷠鷢鷣鷤鷧鷪鷫鷭鷳鷶鷸鷻鷼鸀鸃鸄鸈鸉鸋鸍鸎鸟鸠鸡鸢鸤鸥鸦鸧鸩鸪鸫鸬鸭鸮鸯鸲鸳鸴鸶鸷鸸鸹鸺鸼鸾鸿鹁鹂鹃鹄鹆鹈鹉鹊鹋鹎鹏鹐鹒鹓鹕鹗鹘鹙鹛鹜鹝鹟鹠鹣鹤鹥鹧鹩鹪鹫鹬鹭鹮鹯鹰鹳鹵鹶鹸鹹鹺鹾麣麦麲黄黉黊黑黒黙黟黠黡黣黧黨黩黪黬黴黾鼅鼋鼌鼍鼏鼑鼔鼖鼝鼡鼽鼾齁齆齑齤龂龃龄龅龆龇龈龉龊龋龌龓龙龚龛龣龦龧龨龩龪龫龬龭龮龯龰龱龲龳龴龵龶龷龸龹龺龻龼龽龿鿀鿂鿃鿄鿅鿇鿈鿉鿊鿋鿍鿎鿏鿐鿑鿒鿔鿕鿖鿗鿘鿙鿚鿜鿟鿡鿥鿧鿩鿪鿬鿭鿮鿯豈車賈滑串句契金喇奈懶癩羅蘿螺裸邏洛烙珞落酪駱卵欄爛鸞嵐濫藍襤拉臘蠟廊朗浪狼來冷勞擄櫓爐盧老蘆虜路露魯鷺碌祿綠菉錄論壟弄籠聾牢賂雷壘樓淚漏累縷陋肋凜凌稜綾菱陵讀拏諾丹怒異北磻便復不泌數索參塞省葉殺辰沈拾若掠略亮兩梁糧良諒量勵呂女廬旅濾礪閭驪黎曆歷轢年憐戀撚漣煉璉秊聯輦蓮連鍊列咽烈裂說廉念捻殮獵令囹寧嶺怜玲瑩羚聆鈴零靈領例禮隸惡了僚寮尿料樂燎療蓼遼暈阮劉杻柳流溜留紐類六戮陸倫崙淪輪律慄栗率隆利吏履易李梨理痢罹裡里離匿溺吝燐璘藺鱗麟林淋臨立笠粒狀炙識什茶刺度拓糖洞暴輻行降廓兀嗀塚晴﨓﨔凞猪益神祥福靖精羽﨡諸﨣逸都飯飼館鶴郞隷侮僧免勉卑喝嘆器塀墨層屮悔慨憎懲敏既暑梅海渚漢煮爫琢碑社祉祈祐祖祝禍禎穀突節練縉繁署者臭艹艹著褐視謁謹賓贈辶逸難頻恵𤋮舘🉀🉁🉂🉄🉅🉈𠀋𠀡𠀤𠀾𠁆𠁎𠁨𠂆𠂇𠂉𠂔𠂢𠂤𠂰𠃊𠃋𠃌𠃍𠃑𠃗𠃮𠃵𠄌𠄘𠄬𠅘𠅤𠆢𠆤𠆩𠆫𠇔𠇲𠈄𠈌𠈓𠈔𠈹𠉛𠉴𠉵𠊎𠊙𠊞𠊠𠊷𠊿𠋀𠋥𠌊𠌥𠌫𠍁𠍅𠍆𠍇𠍱𠍾𠍿𠎀𠎁𠎠𠎧𠎵𠎷𠏉𠏋𠏵𠏹𠏼𠐓𠐔𠐟𠐭𠑊𠑥𠒇𠒎𠒑𠒒𠒣𠓼𠓾𠔉𠔿𠕆𠕇𠖄𠖎𠖥𠖱𠖳𠗃𠗊𠗐𠗕𠗖𠗟𠗠𠗫𠗻𠘕𠘙𠘚𠘨𠘰𠙖𠙶𠛬𠜎𠜱𠝹𠞩𠞭𠟈𠠃𠠇𠠬𠠺𠢹𠤎𠤖𠥔𠥹𠥼𠦝𠨑𠩐𠩤𠩯𠪴𠫂𠫍𠫓𠬍𠬝𠮏𠮩𠮷𠮿𠯆𠯋𠯗𠯢𠯫𠯻𠯿𠰂𠰋𠰍𠰠𠰢𠰴𠰺𠰻𠱁𠱂𠱃𠱓𠱥𠱷𠱸𠱼𠲍𠲖𠲜𠲵𠲸𠲿𠳏𠳐𠳓𠳔𠳖𠳝𠳭𠴕𠴨𠴱𠴲𠵅𠵆𠵇𠵈𠵉𠵌𠵍𠵎𠵘𠵯𠵱𠵴𠵼𠵾𠵿𠶖𠶜𠶧𠶲𠷈𠷡𠸄𠸉𠸊𠸍𠸎𠸏𠸐𠸑𠸖𠸝𠹳𠹵𠹶𠹷𠹸𠹹𠹺𠹻𠺌𠺕𠺖𠺘𠺝𠺢𠺫𠺬𠻗𠻘𠻝𠻸𠻹𠻺𠻻𠼝𠼦𠼭𠼮𠼰𠼻𠽌𠽟𠽤𠾍𠾐𠾭𠾴𠾵𠾶𠾼𠿟𠿪𠿫𠿬𠿭𡀔𡀝𡀞𡁏𡁜𡁯𡁵𡁶𡁷𡁸𡁻𡂈𡂖𡂝𡂴𡂿𡃀𡃁𡃇𡃈𡃉𡃏𡃓𡃤𡃴𡃵𡃶𡄯𡄻𡅅𡅈𡅏𡅕𡆀𡆇𡇙𡈁𡈼𡈽𡉏𡉴𡉻𡉼𡊍𡊨𡊩𡊰𡋗𡋣𡋤𡋽𡋾𡌂𡌃𡌄𡌅𡌛𡌺𡍄𡍵𡍶𡎎𡎘𡎚𡎜𡏄𡏅𡏆𡏭𡏾𡐖𡐤𡐿𡑒𡑔𡑕𡑭𡑮𡒊𡒗𡒶𡓨𡓽𡖂𡖔𡖖𡘊𡘓𡘙𡘾𡙇𡙡𡚴𡚸𡚺𡛀𡛁𡛂𡛕𡛟𡛦𡛧𡛨𡛺𡛻𡛼𡛾𡜍𡜐𡜦𡜧𡜺𡜻𡜼𡝂𡝗𡝬𡝭𡝮𡝯𡝰𡝱𡝳𡞫𡞰𡞱𡞲𡞳𡞴𡞵𡟃𡟇𡟙𡟚𡟛𡟜𡟟𡟯𡟵𡟶𡟹𡟺𡟻𡟼𡠠𡠨𡠩𡠪𡠭𡠹𡠺𡠻𡡀𡡅𡡒𡡞𡡡𡡢𡡣𡡤𡡷𡡻𡢃𡢄𡢅𡢞𡢟𡢠𡢡𡢢𡢽𡢾𡢿𡣑𡣖𡣗𡣘𡣙𡣺𡤃𡤄𡤅𡤐𡤑𡤒𡤕𡤜𡤢𡤧𡤻𡥄𡥘𡥪𡥼𡦀𡦃𡦈𡧃𡧛𡧳𡨚𡨭𡨴𡩅𡩋𡩣𡭄𡯁𡯂𡰪𡱖𡱰𡲢𡲥𡲬𡴭𡵅𡵆𡵓𡵞𡵢𡵸𡶒𡶜𡶡𡶶𡶷𡶺𡷊𡷑𡷠𡷫𡷹𡸜𡸳𡸴𡸷𡸽𡺉𡺤𡺨𡻈𡻕𡼏𡼞𡽜𡽶𡾞𡾡𡿨𡿺𢁅𢁉𢁾𢂚𢃇𢃼𢄪𢅛𢅳𢅺𢅻𢆡𢇁𢇃𢈈𢈘𢉼𢌞𢌡𢌥𢎙𢎭𢏺𢑥𢑱𢒋𢒑𢒰𢒼𢓁𢓉𢓌𢓜𢓡𢓭𢔓𢔛𢔰𢕔𢖍𢖯𢖾𢘉𢘛𢘜𢘫𢙨𢙺𢚖𢚘𢛳𢛴𢛵𢛶𢜒𢜔𢜛𢜟𢜪𢝵𢞁𢞖𢞴𢞵𢟍𢠃𢡟𢡠𢡱𢢫𢢭𢣁𢣷𢤦𢤹𢥏𢥧𢥫𢦀𢦏𢦓𢩦𢪸𢫏𢫕𢫦𢫨𢬎𢬢𢬿𢭃𢭆𢭏𢭪𢮦𢯊𢯎𢯭𢯾𢰝𢰤𢰦𢰸𢱋𢱌𢱕𢱢𢱤𢱯𢲛𢲡𢲴𢳂𢳉𢳪𢴈𢴒𢵄𢵌𢵧𢶀𢶍𢶕𢶠𢶣𢶤𢶷𢷡𢺋𢻠𢻯𢽴𢿣𢿫𣁄𣁋𣁦𣁳𣁴𣁾𣂎𣂷𣂼𣃚𣃽𣄃𣄽𣅽𣆂𣆤𣆥𣆳𣆶𣇃𣇄𣇈𣇉𣇪𣇵𣇷𣇸𣇹𣈏𣈥𣈯𣈱𣈲𣈳𣈴𣉖𣉞𣉢𣊁𣊉𣊊𣊫𣊬𣋒𣋠𣋡𣌀𣌊𣌟𣍃𣍐𣍲𣎴𣏐𣏓𣏕𣏞𣏟𣏤𣏦𣏴𣏵𣏹𣏺𣏾𣐀𣐿𣑊𣑋𣑐𣑑𣑥𣓤𣓥𣔰𣕑𣕧𣖄𣖔𣖕𣖙𣖜𣖻𣗄𣗋𣗍𣗎𣗏𣗳𣘀𣘗𣘚𣘸𣘹𣘺𣘻𣘼𣙀𣙇𣙙𣙟𣙷𣚎𣚞𣚦𣚭𣚺𣛟𣛮𣜃𣜌𣜖𣜜𣜠𣜭𣜯𣝣𣝤𣝦𣞁𣞢𣞼𣟂𣟕𣟖𣟗𣟧𣟱𣟿𣠤𣠺𣠽𣧂𣪘𣪧𣫙𣫛𣫮𣭚𣮈𣱣𣱿𣲗𣲘𣲙𣲚𣲛𣲩𣲵𣲷𣲾𣳇𣳈𣳉𣳼𣳽𣳿𣴀𣴎𣴘𣵀𣵛𣵾𣶏𣶶𣶷𣶸𣶺𣶻𣶼𣶽𣷓𣷣𣷸𣷹𣷺𣸆𣸑𣸣𣸬𣸭𣸮𣸯𣸰𣸱𣸹𣺈𣺉𣺋𣺹𣺿𣻗𣻷𣻸𣻹𣻺𣻻𣻼𣼎𣼵𣽁𣽊𣽡𣽾𣽿𣾀𣾁𣾂𣾏𣾴𣾷𣿀𣿅𣿫𣿬𣿭𣿮𣿯𣿰𤀑𤀹𤀺𤀻𤀼𤀽𤁋𤁗𤂅𤂋𤂌𤂍𤂑𤂖𤃉𤃡𤃬𤄃𤄄𤄏𤄙𤄿𤅀𤅄𤅎𤅕𤅖𤅗𤅜𤅟𤅡𤅷𤅺𤆣𤆤𤆥𤆬𤆵𤇆𤇍𤇢𤇼𤇾𤈎𤈛𤉋𤉖𤉙𤉶𤉷𤉸𤊄𤊓𤊕𤊥𤊿𤋁𤋉𤋊𤋱𤋺𤌍𤌚𤌴𤍈𤍒𤍢𤍣𤍤𤍥𤎌𤎖𤎝𤎼𤎽𤏁𤏐𤏩𤏪𤏲𤏸𤐄𤐙𤐰𤐵𤐶𤑚𤑛𤑳𤒇𤒈𤒹𤒼𤓎𤓓𤓖𤔡𤕸𤗈𤘅𤘘𤘩𤘪𤙥𤙴𤚗𤚥𤛔𤜆𤞏𤟠𤟱𤠒𤠣𤢂𤢖𤣩𤣰𤣱𤣲𤣳𤣻𤣿𤤀𤤌𤤖𤤗𤤙𤤯𤤳𤤴𤤾𤤿𤥀𤥁𤥃𤥢𤥣𤥴𤥵𤥶𤥻𤥿𤦂𤦉𤦊𤦋𤦌𤦎𤦏𤦧𤦩𤦫𤦬𤦭𤦷𤦹𤦺𤦻𤧅𤧐𤧛𤧞𤧟𤧣𤧥𤧬𤧭𤧶𤧷𤧸𤧹𤨎𤨒𤨓𤨕𤨢𤨣𤨤𤨥𤨦𤨧𤨨𤨩𤨪𤨾𤩂𤩅𤩍𤩎𤩏𤩐𤩑𤩝𤩥𤩦𤩧𤩱𤩷𤩸𤩹𤩽𤪌𤪓𤪔𤪕𤪖𤪤𤪥𤪧𤪱𤪲𤪳𤪺𤪻𤪼𤫀𤫇𤫉𤫑𤫟𤫢𤫩𤬏𤭖𤭯𤯵𤰉𤰖𤲞𤲟𤳉𤳙𤴆𤴓𤴔𤶸𤷪𤷫𤸄𤸎𤸷𤸻𤹐𤹪𤺅𤺋𤺥𤺧𤼎𤽜𤾗𤾚𤾩𤾸𤿂𤿲𥀬𥁊𥁒𥁕𥂝𥄢𥄫𥅈𥅽𥅾𥆩𥇍𥇣𥇥𥇦𥇧𥈞𥈠𥈡𥉌𥉐𥊙𥋇𥋘𥌎𥌑𥌓𥌾𥍉𥎵𥏾𥐙𥐥𥐮𥐯𥐰𥐵𥑆𥑬𥑮𥒎𥒚𥓙𥔎𥔱𥔲𥔵𥔿𥕛𥕜𥕝𥕞𥕥𥕦𥖁𥖄𥖏𥖧𥖨𥖹𥗕𥗛𥗠𥘅𥘵𥙿𥚃𥚕𥛣𥛶𥜝𥜥𥜽𥝱𥝲𥞩𥞴𥟇𥟟𥟠𥟡𥠲𥠺𥡗𥡝𥡲𥡴𥣈𥣞𥣡𥤃𥥆𥥖𥥸𥦬𥧄𥧔𥩔𥪕𥪜𥪮𥪯𥫗𥫣𥫤𥫩𥫱𥭴𥮉𥮗𥮲𥮳𥮴𥯆𥯟𥯤𥯥𥰁𥰆𥰔𥰡𥱊𥱋𥱤𥱥𥲤𥳀𥳁𥳾𥴠𥴰𥵃𥶡𥶹𥸎𥸮𥹄𥹉𥹖𥹢𥹥𥺁𥺂𥺃𥺆𥺦𥺼𥻂𥻨𥼚𥼣𥽋𥽜𥿔𥿠𥿡𥿢𥿻𦀌𦀗𦀡𦀩𦁈𦁗𦁠𦁤𦂃𦂗𦂤𦂥𦃭𦄂𦄡𦅙𦅚𦅛𦅜𦆭𦆲𦇝𦈡𦈢𦉎𦉘𦉡𦉫𦉰𦊆𦊓𦋐𦌵𦍋𦍑𦎾𦏸𦐐𦐒𦑊𦑩𦒄𦒈𦒉𦔒𦕲𦖠𦖤𦖭𦖿𦘒𦘦𦙶𦙾𦚯𦚰𦚵𦛚𦛼𦜖𦜝𦞙𦞳𦞴𦟘𦠜𦡆𦡞𦡮𦢊𦢓𦣇𦣝𦣪𦤎𦤑𦤦𦤹𦥯𦦙𦦨𦦵𦧝𦧲𦧺𦨞𦨭𦨮𦨴𦩑𦩘𦪌𦪷𦫿𦬅𦬓𦬕𦬨𦭐𦭑𦭒𦭓𦭛𦭜𦭵𦮂𦮖𦮗𦮝𦮳𦯀𦯷𦰩𦱀𦱆𦱳𦱾𦱿𦲀𦲁𦲂𦲞𦲤𦲷𦲸𦲽𦳀𦳃𦳑𦳝𦴢𦴣𦴤𦴦𦴧𦴨𦴩𦴪𦵑𦵴𦶠𦶡𦶢𦶣𦶤𦶦𦶧𦶮𦷪𦷫𦷰𦸀𦸅𦸇𦹀𦹃𦹄𦹅𦹥𦹮𦹷𦺄𦺈𦺋𦺙𦻐𦻑𦻒𦻓𦻔𦻕𦼦𦽳𦽴𦾔𦾟𦾡𦿞𦿟𦿶𦿷𦿸𧀎𧁓𧂈𧂭𧂮𧃍𧃒𧃴𧃸𧃽𧄉𧄌𧄦𧄧𧄹𧅤𧅥𧅵𧈛𧉟𧉧𧊅𧊋𧊲𧊶𧋦𧍒𧎚𧏚𧏛𧏾𧏿𧐐𧐢𧑉𧑐𧒄𧒽𧕴𧖣𧗠𧗤𧗽𧗾𧗿𧘇𧘌𧘔𧘕𧘥𧘱𧘲𧘹𧙕𧙖𧙗𧚄𧚓𧚔𧜎𧜏𧜣𧜵𧜶𧝒𧝞𧞄𧞅𧟌𧡘𧢝𧣈𧤤𧥧𧦅𧦠𧦴𧧝𧧽𧨊𧨎𧨾𧩑𧩓𧩙𧩣𧪽𧪾𧫴𧬂𧬆𧬋𧬘𧬸𧬹𧬺𧭈𧭥𧮙𧮳𧮾𧯇𧯯𧯴𧰼𧱬𧲱𧲸𧳅𧳯𧴯𧵓𧵔𧵦𧵳𧶄𧶏𧶘𧶠𧶽𧷜𧸐𧹍𧹏𧹽𧺯𧻴𧼛𧾷𨀉𨀞𨀣𨀤𨁈𨂃𨂊𨂐𨂻𨂾𨂿𨃰𨃴𨄮𨅏𨅔𨅝𨅯𨆉𨆯𨆼𨈇𨈚𨉖𨉷𨊂𨊛𨋍𨋢𨋳𨌆𨌘𨌯𨌺𨍥𨍭𨍽𨎊𨏍𨏶𨐈𨐌𨐒𨑕𨑬𨑳𨒂𨓜𨔁𨔼𨔽𨕫𨗈𨗉𨗨𨗴𨘀𨘋𨘥𨘻𨙸𨚪𨚫𨚲𨚼𨛗𨛘𨛦𨛺𨜏𨜓𨠄𨤳𨥆𨥈𨥖𨥤𨥨𨥫𨥬𨥭𨥾𨦇𨦈𨦉𨦨𨦪𨦺𨦻𨧀𨧜𨧞𨧡𨧣𨧤𨧨𨧹𨧺𨧻𨧼𨨏𨨖𨨞𨨥𨨲𨨶𨩄𨩅𨩆𨩇𨩈𨩉𨩊𨩙𨩚𨩱𨪁𨪃𨪙𨪚𨪛𨪜𨫀𨫆𨫋𨫌𨫎𨫝𨫞𨫟𨫠𨫡𨫢𨫣𨫤𨫥𨫪𨬌𨬓𨬡𨬢𨬫𨬬𨬭𨬯𨭆𨭉𨭌𨭎𨭐𨭣𨭤𨭥𨭦𨮏𨮙𨮜𨮝𨮹𨯁𨯂𨯅𨯔𨯗𨯙𨯧𨯨𨯩𨯬𨯯𨯵𨯿𨰃𨰉𨰝𨰣𨰦𨰰𨰹𨰻𨱇𨱏𨱑𨳊𨳍𨳒𨳝𨴐𨴴𨵱𨶊𨶙𨶡𨶹𨷻𨸏𨸗𨸟𨸹𨹥𨹦𨺉𨺗𨺙𨺬𨺳𨻧𨻫𨻶𨼲𨿅𨿸𩁹𩂈𩂋𩂓𩂯𩂰𩂱𩃀𩃤𩃥𩃬𩃭𩄍𩄐𩄼𩅰𩆨𩇕𩇫𩊠𩊱𩐝𩐠𩐳𩐿𩑈𩑝𩑾𩒐𩓐𩓙𩓚𩓞𩓥𩓧𩔉𩖰𩖸𩗏𩗗𩗩𩗴𩚨𩛩𩛰𩜄𩜠𩜰𩜲𩝐𩟔𩟗𩠐𩠻𩡗𩢤𩣆𩣑𩣪𩣱𩣺𩤃𩤅𩤯𩥅𩥇𩥈𩥉𩥝𩥪𩦝𩧃𩧉𩨨𩩍𩩲𩬅𩬎𩯕𩱳𩲭𩴾𩵋𩵚𩵱𩵼𩶘𩷛𩷶𩷹𩸕𩸭𩹉𩹨𩺬𩺰𩻃𩻄𩻛𩻩𩻸𩼣𩼰𩽾𩾃𩾌𩾷𩿗𩿞𪀚𪀯𪁎𪂂𪂇𪂹𪃡𪃭𪃳𪃸𪃹𪃾𪄇𪄣𪄳𪄴𪅐𪆐𪆒𪆓𪆴𪆵𪇟𪇵𪈠𪈳𪊓𪊟𪊭𪊶𪊺𪊽𪋟𪋿𪍑𪎌𪎩𪏭𪐞𪐴𪐷𪑛𪓐𪓟𪖐𪗆𪗋𪗱𪘁𪘂𪘒𪘚𪘲𪙊𪙛𪙤𪚩𪚲𪣻𪤗𪧦𪨰𪨶𪩘𪷿𪾢𫄧𫄨𫄷𫄸𫌀𫍣𫍯𫍲𫍽𫐐𫐓𫑡𫓧𫓯𫓶𫓹𫔍𫔎𫖮𫖯𫖳𫗧𫗴𫘝𫘦𫘪𫘬𫚉𫚕𫚖𫚭𫛭𫝆𫝏𫝑𫝓𫝚𫝛𫝜𫝥𫝶𫝷𫝺𫝻𫝼𫞂𫞉𫞋𫞎𫞔𫞬𫞯𫞼𫞽𫟂𫟅𫟉𫟏𫟒𫟘𫟦𫟰𫟷𫟼𫠆𫠊𫠍𫠗𫠚𫠛𫢸𫣆𫭟𫭢𫮃𫰛𫵷𫶇𫷷𬀩𬀪𬂁𬂩𬃊𬄕𬇙𬇹𬉼𬊈𬊤𬌗𬍛𬍡𬍤𬎆𬒈𬒔𬒗𬕂𬘘𬘡𬘩𬘫𬘬𬘭𬘯𬙂𬙊𬙋𬜬𬜯𬞟𬟁𬟓𬟽𬠖𬣙𬣞𬣡𬣳𬤇𬤊𬤝𬦰𬨂𬨎𬩽𬪩𬬭𬬮𬬱𬬸𬬹𬬻𬬿𬭊𬭎𬭚𬭛𬭤𬭩𬭬𬭳𬭶𬭸𬭼𬮱𬮿𬯀𬯎𬱖𬱟𬳵𬳿𬴂𬴃𬴊𬶋𬶍𬶏𬶐𬶠𬶨𬶭𬶮𬷕𬸘𬸚𬸣𬸦𬸪𬹼𬺈𭕄𮀔𮉸𮕩𮛪你兔再冤冬割勇勺卉卿吆周咢善城姬寃将屠屮巽弢形彫憲成拔晉杞杓桒栟槪櫛沿浩滋潮炭爨爵眞真絣芳芽䕫諭貫軔輸嶲𱱿𲆦𲆰𲆱𲇙</code></pre>



<p>意思是, 這些字 &#8220;可能&#8221; 可以直接在 cjk-jp / cjk-tc 之下共用, 不必重新造字. </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>比較字型差異</title>
		<link>https://codereview.max-everyday.com/compare_fonts/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Sun, 23 Mar 2025 10:14:20 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1891</guid>

					<description><![CDATA[這個 Python 腳本目的在比較兩個字型在 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>這個 Python 腳本目的在比較兩個字型在顯示文字上的差異，並將結果輸出到文件中。它透過逐個字元比較像素差異，計算出每個字元的差異百分比，以及所有字元的平均差異百分比。</p>



<p>如果想看對照圖的話，可以下 &#8211;save 參數,  如果只有要看比對結果, 會顯示在compare_result.txt 文字檔內。</p>



<h2 class="wp-block-heading">為什麼要學這個？</h2>



<p>在設計、排版或任何需要使用字型的領域中，字型的選擇至關重要。即使是看似相似的字型，也可能在細節上存在差異，進而影響整體視覺效果。透過這個 Python 腳本，您可以：</p>



<ul class="wp-block-list">
<li><strong>精準比較字型差異：</strong> 量化兩個字型在像素層級的差異，找出人眼難以察覺的細節。</li>



<li><strong>提升設計品質：</strong> 確保字型選擇符合設計需求，避免因字型差異導致的視覺不協調。</li>



<li><strong>字型開發與測試：</strong> 字型設計師可以利用此工具，測試字型微調後的差異。</li>



<li><strong>排版校對：</strong> 協助校對排版文件，確保字型使用一致。</li>



<li><strong>不同字集之間 glyph 共用的判斷：</strong> 那些字可以同時被用在 cjkjp / cjktc / cjksc 的依據。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">前置作業</h2>



<p>在使用此腳本之前，請確保您已完成以下準備工作：</p>



<ul class="wp-block-list">
<li><strong>安裝 Python 和 Pillow：</strong>
<ul class="wp-block-list">
<li>如果您的電腦尚未安裝 Python，請至 Python 官網下載並安裝。</li>



<li>在命令列或終端機中執行以下指令，安裝 Pillow 函式庫： Bash<br><code>pip install pillow</code></li>
</ul>
</li>



<li><strong>準備字型檔案：</strong>
<ul class="wp-block-list">
<li>將您要比較的兩個字型檔案（例如 <code>.ttf</code> 或 <code>.otf</code> 格式）放置在電腦中方便存取的位置。</li>
</ul>
</li>



<li><strong>準備文字檔案：</strong>
<ul class="wp-block-list">
<li>建立一個文字檔案（例如 <code>text.txt</code>），其中包含您要比較的文字。</li>
</ul>
</li>



<li><strong>Max腳本檔案下載：</strong><br><a href="https://github.com/max32002/MaxFontScripts/blob/master/compare_fonts.py">https://github.com/max32002/MaxFontScripts/blob/master/compare_fonts.py</a></li>
</ul>



<h2 class="wp-block-heading">腳本使用方式</h2>



<p> 在命令列或終端機中，使用以下指令執行腳本：</p>



<pre class="wp-block-code"><code>python compare_fonts.py --font1 &lt;font1_path&gt; --font2 &lt;font2_path&gt; --file &lt;text_file_path&gt; &#91;options]
</code></pre>



<ul class="wp-block-list">
<li><code>&lt;font1_path&gt;</code>：第一個字型檔案的路徑。</li>



<li><code>&lt;font2_path&gt;</code>：第二個字型檔案的路徑。</li>



<li><code>&lt;text_file_path&gt;</code>：文字檔案的路徑。</li>



<li><code>[options]</code>：可選參數。</li>
</ul>



<p><strong>參數說明</strong></p>



<ul class="wp-block-list">
<li><code>--font1 &lt;font1_path&gt;</code>：指定第一個字型檔案的路徑。</li>



<li><code>--font2 &lt;font2_path&gt;</code>：指定第二個字型檔案的路徑。</li>



<li><code>--file &lt;text_file_path&gt;</code>：指定包含要比較文字的文字檔案路徑。</li>



<li><code>--output_file &lt;output_file_path&gt;</code>：指定輸出結果的檔案路徑，預設為 <code>compare_result.txt</code>。</li>



<li><code>-s, --size &lt;font_size&gt;</code>：指定字型大小，預設為 64。</li>



<li><code>--font1_x_offset &lt;x_offset&gt;</code>：指定第一個字型 X 軸偏移量，預設為 0。</li>



<li><code>--font1_y_offset &lt;y_offset&gt;</code>：指定第一個字型 Y 軸偏移量，預設為 0。</li>



<li><code>--font2_x_offset &lt;x_offset&gt;</code>：指定第二個字型 X 軸偏移量，預設為 0。</li>



<li><code>--font2_y_offset &lt;y_offset&gt;</code>：指定第二個字型 Y 軸偏移量，預設為 0。</li>



<li><code>--save</code>：儲存左右對照圖。</li>



<li><code>--reverse</code>：反轉左右對照圖的左右位置。</li>



<li><code>--output_dir &lt;output_directory&gt;</code>：指定對照圖的輸出目錄，預設為 <code>comparison_images</code>。</li>
</ul>



<p><strong>4. 實際範例</strong></p>



<p>假設我們有兩個字型檔案 <code>Arial.ttf</code> 和 <code>Verdana.ttf</code>，以及一個包含文字 &#8220;Hello World&#8221; 的文字檔案 <code>text.txt</code>。我們想要比較這兩個字型在顯示 &#8220;Hello World&#8221; 時的差異。</p>



<ol class="wp-block-list">
<li><strong>準備檔案：</strong>
<ul class="wp-block-list">
<li>將 <code>Arial.ttf</code>、<code>Verdana.ttf</code> 和 <code>text.txt</code> 放置在同一目錄下。</li>
</ul>
</li>



<li><strong>執行腳本：</strong>
<ul class="wp-block-list">
<li>在命令列或終端機中，切換到包含這些檔案的目錄。</li>



<li>執行以下指令： Bash<code>python compare_fonts.py --font1 Arial.ttf --font2 Verdana.ttf --file text.txt</code></li>
</ul>
</li>



<li><strong>查看結果：</strong>
<ul class="wp-block-list">
<li>腳本執行完成後，將在同一目錄下生成一個名為 <code>compare_result.txt</code> 的檔案，其中包含詳細的字元差異百分比和平均差異百分比。</li>



<li>如果使用了 <code>--save</code> 參數，還會在 <code>comparison_images</code> 目錄下生成左右對照圖。</li>
</ul>
</li>
</ol>



<p><strong>5. 進階應用</strong></p>



<ul class="wp-block-list">
<li><strong>調整字型大小和偏移量：</strong> 使用 <code>-s</code>、<code>--font1_x_offset</code>、<code>--font1_y_offset</code>、<code>--font2_x_offset</code> 和 <code>--font2_y_offset</code> 參數，調整字型大小和偏移量，以更精確地比較字型差異。</li>



<li><strong>儲存對照圖：</strong> 使用 <code>--save</code> 參數，儲存左右對照圖，以便更直觀地比較字型差異。</li>



<li><strong>反轉對照圖：</strong> 使用 <code>--reverse</code> 參數，反轉左右對照圖的左右位置。</li>



<li><strong>指定輸出目錄：</strong> 使用 <code>--output_dir</code> 參數，指定對照圖的輸出目錄。</li>
</ul>



<p><strong>6. 注意事項</strong></p>



<ul class="wp-block-list">
<li>字型檔案的路徑必須正確。</li>



<li>文字檔案的編碼必須為 UTF-8。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>針對上面產出的文字檔, 接續處理是:</p>



<p>篩選文字檔中的差異百分比結果並輸出特定字元<br><a href="https://codereview.max-everyday.com/filter_results/">https://codereview.max-everyday.com/filter_results/</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>取得unicode命名的圖片目錄的包含文字</title>
		<link>https://codereview.max-everyday.com/get_image_chars/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Tue, 18 Mar 2025 15:07:41 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1877</guid>

					<description><![CDATA[主要是把圖片檔名批次轉成文字清單。 為什麼要 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>主要是把圖片檔名批次轉成文字清單。</p>



<h2 class="wp-block-heading">為什麼要學這個？</h2>



<p>對於做字體設計或整理素材的人很有幫助。它會掃描整個資料夾。找出符合條件的圖片並提取 Unicode 代碼。最後匯集成一個 UTF-8 編碼的文字檔。</p>



<h2 class="wp-block-heading">使用情境</h2>



<ul class="wp-block-list">
<li>您有一組圖片，這些圖片的檔名代表 Unicode 字元（例如，<code>65.png</code> 代表 Unicode 字元 U+0041）。</li>



<li>您想要快速產生一個包含這些 Unicode 字元的字元集檔案，以便在其他應用程式中使用。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">前置作業</h2>



<p>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/get_image_chars.py">https://github.com/max32002/MaxFontScripts/blob/master/get_image_chars.py</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">使用方法</h2>



<p>你需要先安裝 Python 環境。確保腳本存成 get_image_chars.py 檔案。在終端機輸入指令就能執行。基本的語法結構很簡單。</p>



<pre class="wp-block-code"><code>python3 get_image_chars.py &#91;輸入目錄] &#91;參數]
</code></pre>



<p>[輸入目錄] 是必填的輸入目錄路徑。</p>



<p>[參數] 說明如下。</p>



<ul class="wp-block-list">
<li><strong>&#8211;output</strong> 或 <strong>-o</strong> 用來指定輸出的文字檔檔名。預設會自動用資料夾名稱 + &#8220;.txt&#8221; 命名。</li>



<li><strong>&#8211;filename_rule</strong>或 <strong>-f</strong> 決定怎麼解析檔名。有三種選項。
<ul class="wp-block-list">
<li>unicode_int 代表檔名是十進位數字。這是<strong>預設值</strong>。</li>



<li>unicode_hex 代表檔名是十六進位數字。</li>



<li>char 代表直接讀取檔名的第一個字元。</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">使用範例</h2>



<p>如果圖片檔名是 20320.png 這種十進位格式。直接輸入目錄路徑即可。</p>



<pre class="wp-block-code"><code>python get_image_chars.py ./my_images
</code></pre>



<p>如果檔名是十六進位。例如 4f60.png 這種格式。需要加上 -f 參數。</p>



<pre class="wp-block-code"><code>python get_image_chars.py ./my_images -f unicode_hex
</code></pre>



<p>如果直接用文字當檔名。例如 你.png 或 好.png。請使用 char 模式。並可以自訂輸出檔名。</p>



<pre class="wp-block-code"><code>python get_image_chars.py ./my_images -f char -o my_chars.txt
</code></pre>



<p>執行完畢後。畫面會顯示處理了多少個字。輸出的文字檔會放在你指定的路徑。</p>



<p>支援的圖片格式包括：.JPG, .JPEG, .PNG, .PBM, .PGM, .PPM, .BMP, .TIF, .TIFF。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">相關文章</h2>



<p>取得字體的包含文字<br><a href="https://codereview.max-everyday.com/get-font-chars/">https://codereview.max-everyday.com/get-font-chars/</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>過濾指定的筆畫數</title>
		<link>https://codereview.max-everyday.com/filter_characters/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Wed, 12 Mar 2025 17:14:05 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1860</guid>

					<description><![CDATA[在 AI 算字資源有限的情況下, 想先加強去 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>在 AI 算字資源有限的情況下, 想先加強去訓練&#8221;常用字&#8221; 且 &#8220;高筆畫字&#8221; 的字, 該怎麼做? </p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">前置作業</h2>



<p>筆畫的json字典檔需要手動下載:<br><a href="https://github.com/max32002/MaxFontScripts">https://github.com/max32002/MaxFontScripts</a></p>



<p>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/filter_characters.py">https://github.com/max32002/MaxFontScripts/blob/master/filter_characters.py</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Python 腳本 filter_characters.py，參數說明:</p>



<ul class="wp-block-list">
<li>&#8211;input: 讀取指定的文字檔</li>



<li>&#8211;output: 結果輸出到指定檔案</li>



<li>&#8211;radical：只保留部首為該值的字</li>



<li>&#8211;radical_count：只保留部首筆畫數等於該值的字</li>



<li>&#8211;strokes_more 只保留筆畫數大於等於該值的字</li>
</ul>



<h3 class="wp-block-heading">使用方式<a href="https://github.com/max32002/chinese_dictionary#%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F"></a></h3>



<p>準備輸入文字檔, 建立 input.txt，內容如下：</p>



<pre class="wp-block-preformatted">漢字測試中字典筆畫
</pre>



<h4 class="wp-block-heading">篩選筆畫數大於等於 9 的字</h4>



<p><a href="https://github.com/max32002/chinese_dictionary#%E7%AF%A9%E9%81%B8%E7%AD%86%E7%95%AB%E6%95%B8%E5%A4%A7%E6%96%BC%E7%AD%89%E6%96%BC-9-%E7%9A%84%E5%AD%97"></a></p>



<pre class="wp-block-code"><code>python filter_characters.py --input input.txt --strokes_more 9 --output output.txt
</code></pre>



<p>結果：</p>



<pre class="wp-block-preformatted">漢測試筆畫
</pre>



<h4 class="wp-block-heading">篩選部首為「水」的字</h4>



<p><a href="https://github.com/max32002/chinese_dictionary#%E7%AF%A9%E9%81%B8%E9%83%A8%E9%A6%96%E7%82%BA%E6%B0%B4%E7%9A%84%E5%AD%97"></a></p>



<pre class="wp-block-code"><code>python filter_characters.py --input input.txt --radical 水 --output output.txt
</code></pre>



<p>結果：</p>



<pre class="wp-block-preformatted">漢測
</pre>



<h4 class="wp-block-heading">篩選部首筆畫數 &gt;= 3</h4>



<p><a href="https://github.com/max32002/chinese_dictionary#%E7%AF%A9%E9%81%B8%E9%83%A8%E9%A6%96%E7%AD%86%E7%95%AB%E6%95%B8--3"></a></p>



<pre class="wp-block-code"><code>python filter_characters.py --input input.txt --radical_count 3 --output output.txt
</code></pre>



<p>結果：</p>



<pre class="wp-block-preformatted">字字
</pre>



<h4 class="wp-block-heading">篩選 筆畫數 ≥ 9 且 部首為「水」 的字：</h4>



<p><a href="https://github.com/max32002/chinese_dictionary#%E7%AF%A9%E9%81%B8-%E7%AD%86%E7%95%AB%E6%95%B8--9-%E4%B8%94-%E9%83%A8%E9%A6%96%E7%82%BA%E6%B0%B4-%E7%9A%84%E5%AD%97"></a></p>



<pre class="wp-block-code"><code>python filter_characters.py --input input.txt --strokes_more 9 --radical 水 --output output.txt
</code></pre>



<p>結果：</p>



<pre class="wp-block-preformatted">漢測</pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">重覆訓練高筆畫數造成的影響</h2>



<p>如果高筆畫數的字與低筆畫數一起訓練, 從推論結果來看, 高筆畫數的細節不容易正確判斷, 但針對高筆畫數增加訓練, 遇到複雜筆畫的結果有顯著改善, 但相對會讓低筆畫數的長線條產生影響, 影響是線條的寬度可能不能保持一持性, 會微微的造成短暫的鋸齒狀.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
