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 &lt;stdio.h&gt; 【参考方案1】:
void main()

void main 在任何一种语言中都不是有效的,所以马上告诉你这不是最高质量的代码。

使用标准 int main(),或 C++11 语法,如果您对此进行标准化,auto main() -&gt; 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++ 程序中,只需使用类型更安全的coutcin iostreams。通过运算符&lt;&lt; 输出。对于没有空格的名称,您可以使用运算符&gt;&gt; 输入,但我建议将其更改为行输入,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++ 特定的输入/输出流,请查看 &lt;&lt; 重载运算符。

【讨论】:

以上是关于c++ 如何转换UTF8编码??的主要内容,如果未能解决你的问题,请参考以下文章

易语言如何把GBK编码转换成UTF8?好的追加50

应该如何彻底解决UTF8编码转换成GB2312编码问题?

如何使用C语言将汉字转换成UTF8编码,如将“你好”转成:%E4%BD%A0%E5%A5%

utf-8编码的页面如何转成gbk编码的页面(急)

c++如何通过utf8字符串编码的文件名,在windows上打开一个文件

C#如何从UTF8转换成GBK