我試圖在lua中將一些法文文本轉換爲大寫,它不會轉換重音字符。任何想法爲什麼?lua string.upper不能使用重音字符?
測試腳本:
打印( 'ECHELLE')
打印(string.upper( 'ECHELLE'))
打印( 'ECHELLE')
打印(string.lower('階梯「))
輸出:
ECHELLE
階梯
階梯
階梯
我試圖在lua中將一些法文文本轉換爲大寫,它不會轉換重音字符。任何想法爲什麼?lua string.upper不能使用重音字符?
測試腳本:
打印( 'ECHELLE')
打印(string.upper( 'ECHELLE'))
打印( 'ECHELLE')
打印(string.lower('階梯「))
輸出:
ECHELLE
階梯
階梯
階梯
Lua中只是使用C庫函數toupper
,這AFAIK doesn't support accented characters。你需要自己寫一個例程。
這可能有點矯枉過正,但你可以用slnunicode(這是在LuaRocks中可用)做到這一點。
require "unicode"
print(unicode.utf8.upper("échelle"))
-- ÉCHELLE
您可能需要使用unicode.ascii.upper
或unicode.latin1.upper
取決於你的源文件的編碼。
該OP似乎是使用拉丁語1. – lhf 2012-07-20 12:31:03
爲了更有效地解釋這一點,Lua沒有內置的對非ASCII字符串的支持。您可以存儲Latin-1或UTF-8編碼的字符串,但是任何特殊字符串操作函數(upper
,lower
等)都不適用於任何非ASCII字符。
有一些Lua庫添加了不同程度的Unicode支持。所以你將不得不使用其中之一。
這不完全正確。 'string.lower'使用C的'tolower',這取決於當前的語言環境。但我想這意味着如果重音字母需要多個字節,它將適用於Latin-1編碼的字符串,但不適用於UTF-8編碼的字符串。 – lhf 2012-07-20 11:22:39
@lhf:無法保證當前本地(特定於平臺)理解Latin-1或UTF-8或任何特定的編碼。 – 2012-07-20 16:46:40
您需要設置合適的語言環境,這取決於這些字符串在源中的編碼方式。 由於輸出的結果,你似乎正在使用拉丁文1。 在這種情況下,試圖將線下在你的腳本的頂部:
os.setlocale("fr_FR.ISO8859-1")
此名稱是適用於Mac OS X.對於Linux,嘗試
os.setlocale("fr_FR.iso88591")
如果」重新使用UTF,那麼設置語言環境將無濟於事,因爲string.lower
一次只能將字符串轉換爲一個字節。
Lua的'toupper'支持語言環境,與編碼不同。 – lhf 2012-07-20 13:40:46