我有一個文本檔案 input.xlf
<trans-unit id="loco:5e7257a0c38e0f5b456bae94">
<source>Login</source>
<target>登入</target>
<note>Login Header</note>
</trans-unit>
基本上,我需要更換<與<和>與“>”,所以我運行下面的腳本
runner.bat
powershell -Command "(gc input.xlf) -replace '<', '<' | Out-File -encoding ASCII output.xlf";
powershell -Command "(gc output.xlf) -replace '>', '>' | Out-File -encoding ASCII output.xlf";
上面的作業直到我注意到下面的輸出
<trans-unit id="loco:5e7257a0c38e0f5b456bae94">
<source>Login</source>
<target>??????</target>
<note>Login Header</note>
</trans-unit>
我嘗試洗掉編碼,但現在我得到了
<trans-unit id="loco:5e7257a0c38e0f5b456bae94">
<source>Login</source>
<target>????…¥</target>
<note>Login Header</note>
</trans-unit>
下面是我想要的輸出
<trans-unit id="loco:5e7257a0c38e0f5b456bae94">
<source>Login</source>
<target>登入</target>
<note>Login Header</note>
</trans-unit>
uj5u.com熱心網友回復:
有(可能)兩個字符編碼問題:
上輸出,使用
-Encoding Ascii被保證為“有損地”音譯任何非ASCII的字符范圍到文字?字符。- 要保留所有字符,您必須選擇Unicode編碼,例如
-Encoding Utf8
- 要保留所有字符,您必須選擇Unicode編碼,例如
在input 上,您必須確保 PowerShell 正確讀取輸入檔案。
- 具體來說,Windows PowerShell將無BOM 的UTF-8 檔案誤解為ANSI編碼,因此您也需要使用
-Encoding Utf8withGet-Content。
- 具體來說,Windows PowerShell將無BOM 的UTF-8 檔案誤解為ANSI編碼,因此您也需要使用
此外,您可以通過一次 powershell.exe呼叫而逃脫,并且您還可以優化此呼叫:
powershell -Command "(gc -Raw -Encoding utf8 input.xlf) -replace '<', '<' -replace '>', '>' | Set-Content -NoNewLine -Encoding Utf8 output.xlf"
使用
-Rawwithgc(Get-Content) 將檔案作為一個整體讀取,而不是讀取到行陣列中,從而加快了-replace操作速度。你可以鏈式
-replace操作對于已經是文本(字串)的輸入,
Set-Content通常是更快的選擇。[1]
-NoNewLine防止附加額外的尾隨換行符。
[1] 這里幾乎沒有區別,因為只寫入了一個字串,但是對于許多輸入字串(逐行輸出),它可能 - 請參閱此答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/345255.html
