Linux對其文件API使用什麼編碼?我應該如何在C++中使用路徑字符串,使用什麼類?我的意思是非ASCII字符的路徑。在Windows上,我使用UTF-16和std::wstring
,在Mac-UTF-8和我自己的UTF-8字符串類中。但不幸的是,我的課程在Linux上不可用,所以我應該使用什麼?在Linux上使用文件路徑字符串,使用什麼編碼?
回答
在內部,Linux允許使用任何字節序列作爲文件名,空字節0和正斜槓'/'
(用作目錄分隔符)除外。
在Linux上允許Unicode文件名的通用約定是使用UTF-8
編碼文件名。最簡單的方法是使用舊的std::string
(不是在Windows上建議的std::wstring
),但是,您可能需要編寫自己的類,以驗證它的確是有效的UTF-8
。
有現成的使用庫,提供處理UTF-8
字符串的幾個例子:
- ICU(健壯,但很沉重)。
- Glib::ustring(隱含轉換爲
std::string
,GPL)。 - UTF8-CPP(非常輕量級,僅標頭)。
好的答案,指出空字節和斜槓是特殊的。 +1 –
感謝您提供UTF-8字符串庫的列表,我可能會使用UTF8-CPP。所以,當我調用返回'char *'的系統API時,我應該期待UTF-8? –
一般來說 - 是的,其他程序創建的文件名應該用'UTF-8'編碼。你應該期待這一點,但準備接受無效的「UTF-8」。這就像是規則FCC 15 - 玩的很好,但不要撞別人不好。 – mvp
您仍然可以在使用wchar_t時使用標準類型wchar_t(和%ls用於printf/scanf)。這種類型允許你使用非ASCII字符。
wchar_t mystring[50] = L"sometext";
注意:進行正常的字符串入您必須使用固定的預「L」 wchar_t的,你要記住,這是不一樣的一個char類型,以便其有點滑稽的使用方法: o
這不是我的問題的答案。我將系統調用的字符串作爲'char *'接收,據我所知,沒有標準的C++方式將UTF-8轉換爲UTF-16。 –
對不起,我想我誤解了你的問題。 –
Linux不對文件名執行編碼。儘管使用UTF-8是很常見的。
- 1. PHP - mcrypt在加密字符串上使用什麼編碼?
- 2. 上傳文件使用jquery-ajax和路徑是字符串
- 3. 如何在文件路徑中使用字符串或字符串的子串
- 4. 在資源路徑使用字符串
- 5. 什麼是文件系統路徑字符串的正確編碼?
- 6. 爲什麼base64編碼的字符串使用字符+和/?
- 7. 如何在c中使用子字符串與文件路徑#
- 8. 如何在連接字符串中使用文件路徑?
- 9. 我應該使用什麼路徑格式與bitmapfactory.decodeFile(字符串路徑名)?
- 10. linux文件名(完整路徑)編碼
- 11. StreamReader.ReadToEnd()使用什麼字符編碼?
- 12. 爲什麼某些字符串使用utf-16編碼,而其他字符串只使用utf-8編碼?
- 13. 什麼是文件路徑中的Linux
- 14. NSKeyedArchiver使用什麼字符編碼或文件格式?
- 15. 使用字符串來設置文件夾的路徑VB.Net
- 16. Android獲取文件使用路徑(字符串格式)
- 17. 原始字符串使用的是Windows文件夾路徑
- 18. 使用單個字符串查找多個文件路徑
- 19. 使用sed替換文件中的所有路徑字符串
- 20. 使用PHP從URL字符串獲取文件路徑/擴展
- 21. 什麼是代表文件路徑的guid字符串?
- 22. 結合路徑,文件字符串和文字的路徑
- 23. 使用base 40編碼字符串有什麼含義?
- 24. 這個字符串中使用的編碼方法是什麼?
- 25. 在Linux上使用libcurl在Linux中保存絕對路徑的文件
- 26. 使用符號鏈接的PHP/Linux讀取文件路徑
- 27. 確定在文件上使用什麼樣的編碼?
- 28. Mono在P/Invoke中編組字符時使用什麼編碼?
- 29. 使用HTML5文件系統API從字符串路徑讀取文件
- 30. 爲什麼在部署到webapps文件夾時使用上下文路徑
我實際上傾向於避免文件路徑中存在非ASCII或空格字符。 –
@BasileStarynkevitch:我同意這些課程,但如果你的母語不是英語,那麼它就行不通。例如,我需要保存許多必須有非英文名稱的視頻和音樂文件,否則它們將完全失去其原始含義。 – mvp
@BasileStarynkevitch:我也是,但我不能指望我的德國和日本用戶也這樣做:) –