Character-Encoding
將 UTF-8 文件轉換為 ASCII(盡力而為)
我有一個 UTF-8 文件,其中包含多種語言的文本。很多都是人名。我需要將其轉換為 ASCII,並且我需要使結果看起來盡可能體面。
有很多方法可以將更寬的編碼轉換為更窄的編碼。最簡單的轉換是將所有非 ASCII 字元替換為某個佔位符,例如“_”。如果我知道文件的編寫語言,還有其他可能性,例如羅馬化。
Unix 上可用的 Unix 工具或程式語言庫可以為我提供從 UTF-8 到 ASCII 的體面(盡力)轉換?
大部分文本是基於歐洲拉丁類型的語言。
konwert utf8-ascii
它將根據轉換錶進行盡力轉換。如果您大致了解輸入語言,則可以使用特定於語言的過濾器提供更好的結果,例如
konwert utf8-xmetodo
是將世界語轉換為 x-metodo 表示,
konwert UTF8-tex
將嘗試對變音符號進行 TeX 表示,有語言特定的參數:
konwert UTF8-ascii/de
將“ä”音譯成“ae”(德語習慣)而不是簡單的“a”
konwert UTF8-ascii/rosyjski
將使用波蘭語規則來音譯俄語,而不是“類似英語”的規則,等等……
這將適用於某些事情:
iconv -f utf-8 -t ascii//TRANSLIT
echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLIT
返回helloe ?
。任何iconv
不知道如何轉換的字元都將替換為問號。
iconv
是POSIX,但我不知道是否所有系統都有TRANSLIT
選項。它適用於我在 Linux 上。此外,該IGNORE
選項將默默地丟棄無法在目標字元集中表示的字元(請參閱 參考資料man iconv_open
)。一個劣質但符合 POSIX 的選項是使用
tr
. 此命令用問號替換所有非 ASCII 程式碼點。它一次讀取一個字節的 UTF-8 文本。“É”可能會被替換為E?
或?
,這取決於它是使用組合重音還是預先組合的字元進行編碼的。echo café äëïöü | tr -d '\200-\277' | tr '\300-\377' '[?*]'
該範例
caf? ?????
使用預先組合的字元返回 。