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. 如何在连接字符串中使用文件路径?
- 8. 如何在c中使用子字符串与文件路径#
- 9. 我应该使用什么路径格式与bitmapfactory.decodeFile(字符串路径名)?
- 10. linux文件名(完整路径)编码
- 11. StreamReader.ReadToEnd()使用什么字符编码?
- 12. 原始字符串使用的是Windows文件夹路径
- 13. Android获取文件使用路径(字符串格式)
- 14. 使用PHP从URL字符串获取文件路径/扩展
- 15. 使用字符串来设置文件夹的路径VB.Net
- 16. 什么是代表文件路径的guid字符串?
- 17. 结合路径,文件字符串和文字的路径
- 18. 在Linux上使用libcurl在Linux中保存绝对路径的文件
- 19. 这个字符串中使用的编码方法是什么?
- 20. 使用base 40编码字符串有什么含义?
- 21. 使用符号链接的PHP/Linux读取文件路径
- 22. 确定在文件上使用什么样的编码?
- 23. Mono在P/Invoke中编组字符时使用什么编码?
- 24. 使用HTML5文件系统API从字符串路径读取文件
- 25. Django文件上传使用路径
- 26. 为什么在部署到webapps文件夹时使用上下文路径
- 27. 文件上传Base64编码的字符串在使用Rails的PaperClip中
- 28. 使用字段值的文件路径
- 29. 转换字符串文件夹路径
- 30. 文件路径到字符串
我实际上倾向于避免文件路径中存在非ASCII或空格字符。 –
@BasileStarynkevitch:我同意这些课程,但如果你的母语不是英语,那么它就行不通。例如,我需要保存许多必须有非英文名称的视频和音乐文件,否则它们将完全失去其原始含义。 – mvp
@BasileStarynkevitch:我也是,但我不能指望我的德国和日本用户也这样做:) –