VC++ 怎么改变文件的编码为 UTF-8

VC++ 怎么改变文件的编码为 UTF-8,第1张

这个暂时没有一步实现的方法,首先你要先理解原理 WINDOWS内部是使用宽字节的,用的是unicode 所以你首先要把 ANSI=>Unicode,用函数MultiByteToWideChar实现 然后再把Unicode=>UTF8,用函数WideCharToMultiByte实现 原理就这样,至于具体怎么用

dwordnbsp;istextunicode(constnbsp;pvoidnbsp;pvbuffer,nbsp;intnbsp;cb,pintnbsp;presult);文本文件存在的问题是,它们的内容没有严格和明确的规则,因此很难确定该文件是包含anbsp;nnbsp;snbsp;inbsp;字符还是unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;字符。inbsp;snbsp;tenbsp;xnbsp;tnbsp;unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;使用一系列统计方法和定性方法,以便猜测缓存的内容。由于这不是一种确切的科学方法,因此inbsp;snbsp;tenbsp;xnbsp;tnbsp;unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;有可能返回不正确的结果。第一个参数pnbsp;vnbsp;bnbsp;unbsp;ffnbsp;enbsp;rnbsp;用于标识要测试的缓存的地址。该数据是个无效指针,因为你不知道你拥有的是anbsp;nnbsp;snbsp;inbsp;字符数组还是unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;字符数组。第二个参数cnbsp;bnbsp;用于设定pnbsp;vnbsp;bnbsp;unbsp;ffnbsp;enbsp;rnbsp;指向的字节数。同样,由于你不知道缓存中放的是什么,因此cnbsp;bnbsp;是个字节数,而不是字符数。请注意,不必设定缓存的整个长度。当然,inbsp;snbsp;tenbsp;xnbsp;tnbsp;unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;e能够测试的字节越多,得到的结果越准确。第三个参数pnbsp;rnbsp;enbsp;snbsp;unbsp;lnbsp;tnbsp;是个整数的地址,必须在调用inbsp;snbsp;tenbsp;xnbsp;tnbsp;unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;之前对它进行初始化。对该整数进行初始化后,就可以指明你要inbsp;snbsp;tenbsp;xnbsp;tnbsp;unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;执行哪些测试。也可以为该参数传递nnbsp;unbsp;lnbsp;lnbsp;,在这种情况下,inbsp;snbsp;tenbsp;xnbsp;tnbsp;unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;将执行它能够进行的所有测试(详细说明请参见platformnbsp;sdknbsp;文档)。如果inbsp;snbsp;tenbsp;xnbsp;tnbsp;unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;认为缓存包含unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;文本,便返回tnbsp;rnbsp;unbsp;enbsp;,否则返回fanbsp;lnbsp;snbsp;enbsp;。确实是这样,尽管mnbsp;inbsp;cnbsp;rnbsp;onbsp;snbsp;onbsp;fnbsp;t将该函数的原型规定为返回dnbsp;wnbsp;onbsp;rnbsp;dnbsp;,但是它实际上返回一个布尔值。如果在pnbsp;rnbsp;enbsp;snbsp;unbsp;lnbsp;tnbsp;参数指向的整数中必须进行特定的测试,该函数就会在返回之前设定整数中的信息位,以反映每个测试的结果。winbsp;nnbsp;dnbsp;onbsp;wnbsp;snbsp;9nbsp;8nbsp;在windowsnbsp;98nbsp;下,inbsp;snbsp;tenbsp;xnbsp;tnbsp;unbsp;nnbsp;inbsp;cnbsp;onbsp;dnbsp;enbsp;函数没有有用的实现代码,它只是返回fanbsp;lnbsp;snbsp;enbsp;。

想将普通视频格式转换成H264编码的视频,极力推荐你用 MP4/RM转换专家

这软件支持几乎所有视频的导入,并转成H264编码的MP4、AVI、FLV等格式,视频质量非常好!

软件的转换速度是绝对最快的,视频质量非常好,多核CPU性能优化特别彻底!

对各种机子的支持度是最好的,比如:手机,MP4机,ipad,ipod,psp,iphone等机子!

软件本身不会捆绑大量广告,这点对系统的转换性能很重要!

百度搜索 MP4/RM转换专家

参考资料:

http://hibaiducom/ygjxere/blog/item/23dc9f20dc7f055e9922ed75html

VC60默认的是ansi,区别在于ansi一个字符占一个字节,中文则占两个字节,Unicode不管中文还是字符都占两个字节

ansi字符串:char,一个基本单元即char占一个字节

unicode字符串:wchar_t,一个基本单元即wchar_t(也就是short)占2个字节

比如字符串:123测试

ansi字符串长度是7个字节(7个基本单元),unicode是10个字节(5个基本单元)

这两种编码应该是必须掌握的,以及两种编码的互相转换

UTF-8是个比较奇葩的东西,一般编程是不会遇到的,它里面一个中文可能会占3个字节,跟Unicode不是直接兼容的需要转换,如果是做网络编程的话可能要判断得到的编码是utf-8还是ansi的了,否则就会得到一堆乱码

<p>fprintf是ANSI的,UNICODE的,要用fwprintf;也可以用_ftprintf来同时兼容ANSI和UNICODE;</p>

<p>

</p>

<p>只写入了0和1,是因为UNICODE的123456789,实际上内存上是1 \0 2 \0 3 \0 等等等,而fprintf写的是ANSI字符串遇到\0就结束了,所以就只写了一个字节而已。。。</p>

<p>

</p>

_wsetlocale(0, L"chs"); //必须加上,否则fwprintf对中文不支持

FILE f = fopen("c:\\atxt", "a+");

fwprintf(f, L"%s\n", L"这个可以写了");

fwprintf(f, L"%s\n", L"1234567890");

fclose(f);<p> </p>

<p>

</p>

<p>其实简单来说,就是把你的代码里,先调用_wsetlocate,再把fprintf换成_ftprintf就行了</p>

输出正确的UTF-8纯文本文件分为两个步骤:

写BOM文件头。UTF-8编码是EF BB BF

将文本通过MultibyteToWideChar转换为UTF8格式,写入文件。

需要注意的有两条,一个是,不能以文本方式打开(因为BOM是不可打印的),一个是编码转换要确认初始编码是什么。

1 要获取CPU编码可以使用dos命令wmic cpu get ProcessorId。

2 要在C语言中执行dos命令,一般使用system("wmic cpu get ProcessorId");

3 由于获取到的cpu编码是打印在命令行中的,要获取结果用system就无法实现了。这时可以用windows提供的_popen函数。该函数的功能为,执行一段dos命令,并将程序运行结果(原本的dos打印)保存在内存中,可以通过文件方式读取。

于是,代码如下:

#include <stdioh>#include <stdlibh>int main( void ){ char psBuffer[128]; FILE pPipe; if( (pPipe = _popen( "wmic cpu get ProcessorId", "rt" )) == NULL ) exit( 1 );//执行失败,退出程序。 while(fgets(psBuffer, 128, pPipe))//读取结果,并输出。 { printf(psBuffer); } / 关闭执行标识。本质上是释放这段内存。 / _pclose( pPipe ); return 0;}

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/4150360.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-04-19
下一篇2024-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存