相当于MSVC++_linux g+中的wrename+;?

相当于MSVC++_linux g+中的wrename+;?,linux,visual-c++,unicode,g++,rename,Linux,Visual C++,Unicode,G++,Rename,有人知道linux g++中是否存在MSVC的等价物吗?(相当于cstdio文件重命名函数,使用常量wchar\u t*而不是常量char*作为unicode使用的参数类型) 谢谢 这是特定于平台的。恐怕您必须以某种方式将常量wchar\u t*转换为常量char*。在Linux上,我认为您可以使用iconv函数 编辑:Boost可能为此提供了平台特定的功能。恐怕您必须以某种方式将常量wchar\u t*转换为常量char*。在Linux上,我认为您可以使用iconv函数 编辑:Boost可能对

有人知道linux g++中是否存在MSVC的等价物吗?(相当于cstdio文件重命名函数,使用常量wchar\u t*而不是常量char*作为unicode使用的参数类型)


谢谢

这是特定于平台的。恐怕您必须以某种方式将常量wchar\u t*转换为常量char*。在Linux上,我认为您可以使用iconv函数


编辑:Boost可能为此提供了平台特定的功能。恐怕您必须以某种方式将常量wchar\u t*转换为常量char*。在Linux上,我认为您可以使用iconv函数


编辑:Boost可能对此有所帮助

关键是除NTFS以外的大多数文件系统都将文件名存储在字节字符串中。通常没有明确的编码概念,但文件名必须是以零结尾的非零字节字符串。因此,在所有这样的系统上,文件系统函数只接受文件名的
char*
参数,您必须自己思考如何处理编码问题(如果有)


Windows是特殊的,因为NTFS中的文件名是以null结尾的16位单位字符串。这与Windows上的16位
wchar\u t
类型和各种
\u w*
文件系统功能密切相关。

关键是,除NTFS以外的大多数文件系统都将文件名存储在字节字符串中。通常没有明确的编码概念,但文件名必须是以零结尾的非零字节字符串。因此,在所有这样的系统上,文件系统函数只接受文件名的
char*
参数,您必须自己思考如何处理编码问题(如果有)



Windows是特殊的,因为NTFS中的文件名是以null结尾的16位单位字符串。这与Windows上的16位
wchar\u t
类型以及各种
\u w*
文件系统功能密切相关。

我的mingw-w64 CRT副本具有此功能。或者你在寻找Linux/POSIX的替代品?我在寻找一个Linux替代品,我本应该这么做的。谢谢你的回复:)我的mingw-w64 CRT副本上有这个。或者你在寻找Linux/POSIX的替代品?我在寻找一个Linux替代品,我本应该这么做的。感谢您的回复:)事实上,我没有考虑Boost,但它似乎在文件系统库中有类似的东西。我检查它,然后说它是否符合我的需要。谢谢。C++标准(直到0x)根本不处理Unicode。
char
wchar\u t
几乎都是完全未指定的,与Unicode(或“字符”无关)。@Philipp:那么wstring呢?@dario:
wstring
只是一个
wchar\u t
序列,因此同样的观点适用。引用Unicode标准,“WHARGHART的宽度是编译器特定的,可以小到8位。因此,需要在任何C或C++编译器上移植的程序不应该使用WCARGYT来存储Unicode文本。”就像Dave Mustaine说的,“我想我知道这一切……”谢谢。更正了我的回答确实,我没有考虑Boost,但它似乎在文件系统库中有类似的东西。我检查它,然后说它是否符合我的需要。谢谢。C++标准(直到0x)根本不处理Unicode。
char
wchar\u t
几乎都是完全未指定的,与Unicode(或“字符”无关)。@Philipp:那么wstring呢?@dario:
wstring
只是一个
wchar\u t
序列,因此同样的观点适用。引用Unicode标准,“WHARGHART的宽度是编译器特定的,可以小到8位。因此,需要在任何C或C++编译器上移植的程序不应该使用WCARGYT来存储Unicode文本。”就像Dave Mustaine说的,“我想我知道这一切……”谢谢。更正了我的回答非常有趣,谢谢。还有一些东西我不明白。在linux上,当使用stdio重命名时,系统如何知道我们传递了ascii 8位字符串或编码的unicode 16位字符串(作为简单的8位字符串传递)?(我不知道我的问题是否清楚…@Juicebox:我所知道的文件系统没有编码的概念。您只需传递您认为正确的文件名即可。顺便说一下,没有“8位ASCII”或“unicode 16位字符串”这样的东西。你可能是指其他的东西。作为推论,大多数文件系统没有包含文件名的“字符”概念,只有“代码单元”。您不能完全笼统地询问“此文件名有多少个字符”(例如,文件名可能由单个恶意Unicode代理组成)。这正是字节字符串和“由字符组成的文本”概念之间的根本区别。前者非常简单,后者极其困难。@Juicebox:根本不解释。Linux文件系统级别上的编码没有任何关联:没有ASCII,没有Unicode,什么都没有。您向函数传递一个字节序列,系统正好使用这个字节序列。如果您有Unicode字符串,通常会从区域设置环境变量中获取系统可能期望的编码信息。@Juicebox:文件名是字节序列。这取决于你如何用文本的方式来解释它们。对于ASCII,这通常是一致同意的,但对于超出此范围的任何内容,您必须对如何解释字节序列有一些额外的知识。但是仔细想想,您会发现文件系统实际上不需要了解文本。这取决于程序与用户通信并决定要操作哪些文件。非常有趣,谢谢。还有一些东西我不明白。在linux上,当使用stdio重命名时,系统如何知道这一点