簡體   English   中英

Sed 使用 UTF8 輸入

[英]Sed with UTF8 input

我需要幫助才能上學。 我有(當然是來自 stackoverflow)這個將字符串的第一個字符大寫的腳本。

sed -r "s/(^|\.\s+)./\U&/g" <$temp_file_2

但是其中的 output 是 ANSI 編碼或者那是什么。 file -bi 顯示 unknown-8bit 編碼格式。

utf-8中的output報備有什么變化嗎?

PS:這條sed命令是用來把行首字符大寫的。 (支持特殊的斯洛伐克字符,如 ščťžýáíéď 等) PS:文件必須為 UTF-8,因為內容已插入 mysql 數據庫。 轉換文件導致信息丟失。

問題是sed可能無法處理非 ASCII 字符,尤其是當系統區域設置不是 UTF8 時。

$ bash -c "echo 'abc,ščťžýáíéď' | LANG= LC_CTYPE= sed -E --debug 's/./\U&/g'"
SED PROGRAM:
  s/./\U&/g
INPUT:   'STDIN' line 1
PATTERN: abc,\o37777777705\o37777777641\o37777777704\o37777777615\o37777777705\o37777777645\o37777777705\o37777777676\o37777777703\o37777777675\o37777777703\o37777777641\o37777777703\o37777777655\o37777777703\o37777777651\o37777777704\o37777777617
COMMAND: s/./\U&/g
MATCHED REGEX REGISTERS
  regex[0] = 0-1 'a'
PATTERN: ABC,\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777\o37777777777
END-OF-CYCLE:
ABC,

如您所見, sed將每個非 ASCII 字符視為幾個單獨的字節,因此它錯誤地將它們大寫。 一種解決方案是將LANGLC_CTYPE設置為 UTF8 兼容的語言環境。

$ bash -c "echo 'abc,ščťžýáíéď' | LANG=C.UTF8 LC_CTYPE=C.UTF8 sed -E --debug 's/./\U&/g'"
SED PROGRAM:
  s/./\U&/g
INPUT:   'STDIN' line 1
PATTERN: abc,\o37777777705\o37777777641\o37777777704\o37777777615\o37777777705\o37777777645\o37777777705\o37777777676\o37777777703\o37777777675\o37777777703\o37777777641\o37777777703\o37777777655\o37777777703\o37777777651\o37777777704\o37777777617
COMMAND: s/./\U&/g
MATCHED REGEX REGISTERS
  regex[0] = 0-1 'a'
PATTERN: ABC,\o37777777705\o37777777640\o37777777704\o37777777614\o37777777705\o37777777644\o37777777705\o37777777675\o37777777703\o37777777635\o37777777703\o37777777601\o37777777703\o37777777615\o37777777703\o37777777611\o37777777704\o37777777616
END-OF-CYCLE:
ABC,ŠČŤŽÝÁÍÉĎ

參考:

嘗試這個

  cat <src> | iconv -f <srcenc> | sed .... | iconv -t <targetenc> > target

要查看編​​碼列表:

  iconv -l

要查看您是否猜測輸入文件的編碼正確,請檢查

cat <src> | iconv -f <srcenc> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM