在Windows和Linux下,用C语言将UTF-16转换为UTF-8

在Windows和Linux下,用C语言将UTF-16转换为UTF-8,c,unicode,utf-8,utf-16,C,Unicode,Utf 8,Utf 16,我想知道是否有一种推荐的“交叉”Windows和Linux方法用于将字符串从UTF-16LE转换为UTF-8?或者每个环境应该使用不同的方法 我设法在谷歌上搜索了一些对“iconv”的引用,但由于某些原因,我找不到基本转换的示例,例如-将wchar_t UTF-16转换为UTF-8 任何人都可以推荐一种“交叉”的方法,如果你知道参考资料或样本指南,将不胜感激 谢谢,Doori Bar开源非常常用。\include #include <iconv.h> wchar_t *src =

我想知道是否有一种推荐的“交叉”Windows和Linux方法用于将字符串从UTF-16LE转换为UTF-8?或者每个环境应该使用不同的方法

我设法在谷歌上搜索了一些对“iconv”的引用,但由于某些原因,我找不到基本转换的示例,例如-将wchar_t UTF-16转换为UTF-8

任何人都可以推荐一种“交叉”的方法,如果你知道参考资料或样本指南,将不胜感激

谢谢,Doori Bar

开源非常常用。

\include
#include <iconv.h>

wchar_t *src = ...; // or char16_t* on non-Windows platforms
int srclen = ...;
char *dst = ...;
int dstlen = ...;
iconv_t conv = iconv_open("UTF-8", "UTF-16");
iconv(conv, (char*)&src, &srclen, &dst, &dstlen);
iconv_close(conv);
wchar_t*src=…;//或char16_t*在非Windows平台上 int srclen=。。。; char*dst=。。。; int-dstlen=。。。; iconv_t conv=iconv_open(“UTF-8”、“UTF-16”); iconv(conv,(char*)&src,&srclen,&dst,&dstlen); iconv_关闭(conv);
如果您不想使用ICU

  • 窗口:
  • Linux:(Glibc)

  • 感谢各位,这就是我如何解决“跨”windows和linux要求的方法:

  • 下载并安装:
    MinGW
    MSYS
  • 下载了
    libiconv
    源程序包
  • 通过
    MSYS
    编译
    libiconv

  • 就是这样。

    还有一个,它是一个仅标题的库。

    我也遇到了这个问题,我使用

    试试看
    {           
    std::string utf8=boost::locale::conv::utf\u to\u utf(
    (短*)wcontent.c_str(),
    (短*)(wcontent.c_str()+wcontent.length());
    content=boost::locale::conv::from_utf(utf8,“ISO-8859-1”);
    }
    捕获(boost::locale::conv::conversion\u错误e)
    {
    
    std::cout使用PowerShell将编码更改为UTF-8:

    powershell -Command "Get-Content PATH\temp.txt -Encoding Unicode | Set-Content -Encoding UTF8 PATH2\temp.txt"
    

    如果已安装MSYS2,则
    iconv
    软件包(默认安装)允许您使用:

     iconv -f utf-16le -t utf-8 <input.txt >output.txt
    
    iconv-f utf-16le-t utf-8 output.txt
    
    在UTF-8、UTF-16、UTF-32、wchar-is库之间转换字符串的另一种可移植的C语言可能性。

    请看前面的问题:谢谢马克,但我恐怕它对我来说太低级了。我想是“UTF-16”和“UTF-8”应该交换位置。iconv…从哪里来?回答:#包含–另外,这似乎是Linux特有的。是一个跨平台库,在许多平台上都可以使用,包括Linux。在Windows 2008 R2上效果很好。还添加了BOM。
     iconv -f utf-16le -t utf-8 <input.txt >output.txt