c++ 如何转换UTF8编码??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 如何转换UTF8编码??相关的知识,希望对你有一定的参考价值。
例如我知道char buffer[100]是UTF编码的,,怎样转换为UTF8??
普通sting类型 转UTF-8编码格式字符串std::string ofDewarServer::string_To_UTF8(const std::string & str)int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);
wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴
ZeroMemory(pwBuf, nwLen * 2 + 2);
::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen);
int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
char * pBuf = new char[nLen + 1];
ZeroMemory(pBuf, nLen + 1);
::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
std::string retStr(pBuf);
delete []pwBuf;
delete []pBuf;
pwBuf = NULL;
pBuf = NULL;
return retStr;
参考技术A 百度上可以搜到UTF8的编码原理,掌握后你就可结合所掌握的C语言编出程序;
UTF8的编程原理,自已搜一下,不复杂。
也可搜到现成的程序,但你肯定看不懂源程序,所以,你第一步就去了解UTF8
的编码原理。追问
初学C++,,发现什么都要自己编写- -~不像C#那样,微软都帮你封装起来。
追答你说的是标准C++,不可能有这乱七八糟的库函数,
一般大型C++也会大量的封装库的,如VC++,C++BUILDER,
再查查WINDOWS API有没有提供UTF8函数,有什么问题
一搜就行了。自已编,也很简单,不就是“位运算”嘛。
如何将编码从 C 转换为 C++?
【中文标题】如何将编码从 C 转换为 C++?【英文标题】:How to convert coding to C++ from C? 【发布时间】:2015-02-22 10:38:59 【问题描述】:void main()
char name [50];
int id;
int year;
float salary;
float bonus;
printf(" PLEASE ENTER YOUR NAME : ");
scanf("%c",&name);
printf("\n");
printf(" PLEASE ENTER YOUR ID: ");
scanf("%d",&id);
printf("\n");
printf(" ENTER AMOUNT OF YEARS YOU HAVE WORKED: ");
scanf("%d",&year);
printf("\n");
printf(" ENTER YOUR MONTHLY SALARY: ");
scanf("%f",&salary);
printf("\n");
if(year<5)
bonus=1000;
else if((year>5)&&(year<10))
bonus=0.02*(salary)+1000;
else if (year >10)
bonus=0.03*(salary)+1000;
printf("YOUR BONUS IS:",bonus);
printf("/n");
printf("/n");
printf("/n");
printf("***CSC COMPANY ***\n");
printf("NAME : ",name);
printf("ID : ",id);
printf("YEARS OF SERVICES: ",year);
printf("MONTHLY SALARY (RM): ",salary);
printf("BONUS(RM): ",bonus);
getch();
这是我收到的编码,我真的需要帮助将其转换为 C++。请帮帮我。即使我知道该程序相对简单和基本,我在将程序从 C 转换为 C++ 方面也很差劲。因此,如果有人可以帮助我,将不胜感激。另外,如果有人能告诉我如何获得任何适用于 Windows 8.1 的 C 和 C++ 程序,那也太棒了。
【问题讨论】:
将void main()
更改为int main()
,删除getch()
和#include <stdio.h>
。
【参考方案1】:
void main()
void main
在任何一种语言中都不是有效的,所以马上告诉你这不是最高质量的代码。
使用标准 int main()
,或 C++11 语法,如果您对此进行标准化,auto main() -> int
。
char name [50];
在 C++ 中,使用 std::string
表示窄文本字符串变量。
float salary;
float bonus;
默认使用double
而不是float
。例如3.14
的类型是double
,而不是float
。使用float
是一种节省内存的方法,并且在某些情况下可以提高速度,但会减少有效数字的数量(并且可能降低速度,因为与double
之间的转换) .
float
对使用 C 语言的初学者很有用,因为 scanf
和一个简单的 %f
需要 float
。当使用 C++ 等流时,在 C++ 中没有这样的原因。
printf(" PLEASE ENTER YOUR NAME : ");
scanf("%c",&name)
这里的scanf
调用是一个错误。
在这样的 C++ 程序中,只需使用类型更安全的cout
和cin
iostreams。通过运算符<<
输出。对于没有空格的名称,您可以使用运算符>>
输入,但我建议将其更改为行输入,getline
。
getch();
在程序结束时停止并不能解决任何问题:这只是一个问题。所以删除它。
要查看所有输出,请从命令解释器运行程序,或者例如在 Visual Studio 中通过 Ctrl+F5 运行它,或者在调试器中在 main
的最后一个右大括号上放置一个断点。
【讨论】:
【参考方案2】:在您的 C 代码中有一个错误:要获取输入名称,您必须使用 scanf("%s",&name) 而不是 %c。 要将代码转换为 C++,您只需要使用 cin & cout。尽管在 c++ 中允许使用 scanf 和 printf。我使用字符串而不是 char 数组....这里是示例代码:
#include <bits/stdc++.h>
#include<cstdio>
#include<cstring>
#include<string>
#include<conio.h>
using namespace std;
int main()
string name;
int id;
int year;
float salary;
float bonus;
cout<<" PLEASE ENTER YOUR NAME : ";
cin>>name;
cout<<endl;
cout<<" PLEASE ENTER YOUR ID: ";
cin>>id;
cout<<"\n";
cout<<" ENTER AMOUNT OF YEARS YOU HAVE WORKED: ";
cin>>year;
cout<<"\n";
cout<<" ENTER YOUR MONTHLY SALARY: ";
cin>>salary;
cout<<"\n";
if(year<5)
bonus=1000;
else if((year>5)&&(year<10))
bonus=0.02*(salary)+1000;
else if (year >10)
bonus=0.03*(salary)+1000;
cout<<"YOUR BONUS IS:"<<bonus;
cout<<"/n";
cout<<"/n";
cout<<"/n";
cout<<"***CSC COMPANY ***\n";
cout<<"NAME : "<<name;
cout<<"ID : "<<id;
cout<<"YEARS OF SERVICES: "<<year;
cout<<"MONTHLY SALARY (RM): "<<salary;
cout<<"BONUS(RM): "<<bonus;
getch();
【讨论】:
【参考方案3】:你从哪里得到这个 C 代码?
它包含许多错误,并为工作时间恰好为 5 年或 10 年的人调用未定义的行为。依靠这个程序产生的答案来写奖金支票是相当冒险的!
修复 C 版本后,将其转换为 C++ 很简单:只需使用 C++ 编译器进行编译即可。我需要使用 C++ 将其转换为完整的 Windows 交互式应用程序,你来错地方了。如果您只想使用 C++ 特定的输入/输出流,请查看 <<
重载运算符。
【讨论】:
以上是关于c++ 如何转换UTF8编码??的主要内容,如果未能解决你的问题,请参考以下文章
如何使用C语言将汉字转换成UTF8编码,如将“你好”转成:%E4%BD%A0%E5%A5%