鱼C论坛

 找回密码
 立即注册
查看: 2961|回复: 21

这段代码如何转成兼容unicode的

[复制链接]
发表于 2014-3-14 17:37:56 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 拈花小仙 于 2014-3-22 10:12 编辑

#include<windows.h>
#include<stdio.h>
int main()
{
BOOL done=TRUE;
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile("e:\\*.*", &fd);//第一个参数是路径名,可以使用通配
符,懂 DOS 的人应该知道吧!fd 存储有文件的信息
while (done)
{
printf("%s\n",fd.cFileName);
done=FindNextFile(hFind, &fd); //返回的值如果为 0 则没有文件要寻了
}
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 17:37:57 | 显示全部楼层
#include<windows.h>
#include<stdio.h>
#include <locale.h>

int main()
{
        BOOL done=TRUE;
        WIN32_FIND_DATA fd;

        HANDLE hFind = FindFirstFile(TEXT("i:\\*.*"), &fd);
        setlocale(LC_CTYPE, "chs");
        while (done)
        {
                wprintf(TEXT("%s\n"),fd.cFileName);
                done=FindNextFile(hFind, &fd);
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:32:46 | 显示全部楼层
HANDLE hFind = FindFirstFile(L"e:\\*.*", &fd);//第一个参数是路径名,可以使用通配
当前文件是用 . 表示
上一级目录在当前目录中可以查询到 是 ..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 18:47:23 | 显示全部楼层
向往青莲 发表于 2014-3-14 18:32
HANDLE hFind = FindFirstFile(L"e:\\*.*", &fd);//第一个参数是路径名,可以使用通配
当前文件是用 . 表示 ...

如果这么改谁都知道呀,可是改了后,输出就成乱码了,你用VC6?VC6默认是多字节?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:51:29 | 显示全部楼层
拈花小仙 发表于 2014-3-14 18:47
如果这么改谁都知道呀,可是改了后,输出就成乱码了,你用VC6?VC6默认是多字节?

我不用VC6.。。我试试。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:55:10 | 显示全部楼层
#ifndef UNICODE
#define UNICODE
#endif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:56:56 | 显示全部楼层
向往青莲 发表于 2014-3-14 18:51
我不用VC6.。。我试试。。。

HANDLE hFind = FindFirstFile(TEXT("I:\\*.*"), &fd);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:57:30 | 显示全部楼层
我擦。。。。我居然取用L。。。我就说咋不对呢。。。。。
尼玛。。。。。。。SB了。。我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 18:59:24 | 显示全部楼层
my_angel 发表于 2014-3-14 18:55
#ifndef UNICODE
#define UNICODE
#endif

直接改成兼容unicode到是可以,问题是改了后输出的是乱码,所以我想知道有没有对应的版本,怎样改成兼容unicode后,不是乱码的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:00:24 | 显示全部楼层
向往青莲 发表于 2014-3-14 18:57
我擦。。。。我居然取用L。。。我就说咋不对呢。。。。。
尼玛。。。。。。。SB了。。我

直接改成兼容unicode的也不报错,可是会成乱码,我想知道的是怎样兼容,并且让这代码有用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:01:28 | 显示全部楼层
拈花小仙 发表于 2014-3-14 19:00
直接改成兼容unicode的也不报错,可是会成乱码,我想知道的是怎样兼容,并且让这代码有用。

好吧。。其实我没明白。。你想说的是啥意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:04:33 | 显示全部楼层
向往青莲 发表于 2014-3-14 19:01
好吧。。其实我没明白。。你想说的是啥意思?

我把这段代码改成兼容unicode后,可输出到屏幕上的全是乱码?你运行试下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:10:28 | 显示全部楼层
拈花小仙 发表于 2014-3-14 19:04
我把这段代码改成兼容unicode后,可输出到屏幕上的全是乱码?你运行试下

兼容unicode怎么改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:13:26 | 显示全部楼层
#include<windows.h>
#include<stdio.h>
int main()
{
        BOOL done=TRUE;
        WIN32_FIND_DATA fd = {0};
        HANDLE hFind = FindFirstFile(TEXT("I:\\*.*"), &fd);//第一个参数是路径名,可以使用通配符,懂 DOS 的人应该知道吧!fd 存储有文件的信息
                while (done)
                {
#ifdef UNICODE
                        printf("%S\n",fd.cFileName);
#else
                        printf("%s\n",fd.cFileName);
#endif
                        done=FindNextFile(hFind, &fd); //返回的值如果为 0 则没有文件要寻了
                }
                return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:18:02 | 显示全部楼层

还是不行,如果这么简单的话,我就不问了,改成unicode能运行的代码不难,可是改了后,结果不对了,你用我上面的代码转成多字节看下效果;在改成unicode码的,修改下代码看输出结果呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:20:27 | 显示全部楼层
拈花小仙 发表于 2014-3-14 19:18
还是不行,如果这么简单的话,我就不问了,改成unicode能运行的代码不难,可是改了后,结果不对了,你用我 ...

额。。。。这么蛋疼。。。。我只看见有结果。。结果正不正确就没看了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:22:33 | 显示全部楼层
向往青莲 发表于 2014-3-14 19:20
额。。。。这么蛋疼。。。。我只看见有结果。。结果正不正确就没看了。。。

是呀,我转了码以后发现不正确,这才来求教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:25:32 | 显示全部楼层
拈花小仙 发表于 2014-3-14 19:04
我把这段代码改成兼容unicode后,可输出到屏幕上的全是乱码?你运行试下
#define _UNICODE
#define UNICODE
#include <WINDOWS.H>
void main()
{
        TCHAR str[20] = TEXT("Hello World");
        MessageBox(NULL,str,NULL,MB_OK);
}
_UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件。当编译源代码模块时,通常必须同时定义这两个宏。
另外要使用TCHAR,因为他会根据你的声明情况设置字符串类型ASCI还是Unicode。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:35:44 | 显示全部楼层
#define _UNICODE
#define UNICODE
#include<windows.h>
#include<tchar.h>
#include<stdio.h>

int main()
{
        BOOL done=TRUE;
        WIN32_FIND_DATA fd;
        HANDLE hFind = FindFirstFile(_T("e:\\*.*"), &fd);//第一个参数是路径名,可以使用通配符,懂 DOS 的人应该知道吧!fd 存储有文件的信息
        while (done)
        {
                _tprintf(_T("%s\n"),fd.cFileName);
                done=FindNextFile(hFind, &fd); //返回的值如果为 0 则没有文件要寻了
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:42:09 | 显示全部楼层
仰望天上的光 发表于 2014-3-14 19:35
#define _UNICODE
#define UNICODE
#include

这个改成兼容unicode码后,无法输出中文的文件名。不知怎么才能输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 02:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表