【发布时间】:2013-11-28 02:00:49
【问题描述】:
我使用 dirent.h 库来获取文件名。虽然其中大多数是正确的,但这个:
1ZdjĂ„„˘cie główne.JPG_38ba97e477158efb3563274f5bd39af7.jpg_cda6829b61253f64b44a5c7f15e00b45 - Copy.jpg
读作
1ZDJCI~2.JPG
我可以做些什么来防止波浪号替换行为?
我使用的是 Windows 7,Visual Studio C++
路径“./tiles/”
DIR *dir;
struct dirent *ent;
if ((dir = opendir(path.c_str())) != NULL) {
while ((ent = readdir(dir)) != NULL) {
if( strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0 ) { continue; }
string a(ent->d_name);
“正确”(无波浪号替换)文件名示例: "2012-07-29- 227.jpg_955c70788013c4979d5cad857b49d4d2.jpg_8551b27380326b183c17e3469ec97cd3.jpg" “2012-07-29-228.jpg_5b2281bbe1efd6bd7469c4a29114a210.jpg_ee6d3a75864e7e33b3d99c023c962dbf.jpg” “2012-08-31-842.jpg_93562fa908083e5a070467558bba2141.jpg_2e84cdbc1d5a5eb932a1373840119aa4.jpg”
【问题讨论】:
-
...文件名是否合理?
-
你是怎么得到文件名的?
-
'dirent.h` - 这是一个 POSIX 兼容接口
-
列出几个“正确”的文件名。
-
您使用的方法可能不支持 Unicode 和/或长路径。也许使用 UTF-16 Win32 函数并转换回 UTF-8 或您想使用的任何编码?除非你需要跨平台的东西。