C++ 如何使用安装程序和iconv库

C++ 如何使用安装程序和iconv库,c++,c,C++,C,我需要使用incov库将ASCII文本文件转换为UTF-8。我正在使用VisualStudio2008。有人能指导如何做这类事情吗。试图用谷歌搜索它,但不知道从何处获取库文件以及如何使用它们。将ASCII转换为UTF-8的最简单方法是strcpy或memcpy…将ASCII转换为UTF-8的最简单方法是strcpy或memcpy…如果文本确实是ISO-646或“纯旧ASCII”,那么它已经是UTF-8了 事实上,如果是使用所有256个字节值的其他编码,您会发现调用MultiByteToWideC

我需要使用incov库将ASCII文本文件转换为UTF-8。我正在使用VisualStudio2008。有人能指导如何做这类事情吗。试图用谷歌搜索它,但不知道从何处获取库文件以及如何使用它们。

将ASCII转换为UTF-8的最简单方法是strcpy或memcpy…

将ASCII转换为UTF-8的最简单方法是strcpy或memcpy…

如果文本确实是ISO-646或“纯旧ASCII”,那么它已经是UTF-8了

事实上,如果是使用所有256个字节值的其他编码,您会发现调用MultiByteToWideChar来获得UTF-16,然后调用WideCharToMultiByte来获得UTF-8要容易得多

您将需要一个wchar\u t临时缓冲区来存储中间UTF-16结果。无论编译器版本、设置或运行时如何,这都有效,这些是Win32 API,而不是语言运行时API

MacRoman是代码页10000,所以您肯定可以这样处理它。见:


您可能还发现ICU4C比iconv更容易在Windows上工作。

如果您的文本实际上是ISO-646或“纯旧ASCII”,那么它已经是UTF-8了

事实上,如果是使用所有256个字节值的其他编码,您会发现调用MultiByteToWideChar来获得UTF-16,然后调用WideCharToMultiByte来获得UTF-8要容易得多

您将需要一个wchar\u t临时缓冲区来存储中间UTF-16结果。无论编译器版本、设置或运行时如何,这都有效,这些是Win32 API,而不是语言运行时API

MacRoman是代码页10000,所以您肯定可以这样处理它。见:


您可能还发现ICU4C比iconv更容易在Windows上工作。

您的问题有点误导,因为Mac Roman与ASCII不同


有关Windows版LibIconv的下载和安装说明,请参见

您的问题有点误导,因为Mac Roman与ASCII不同



有关Windows版LibIconv的下载和安装说明,请参见

是否有理由您必须使用iconv,而不是以其他方式使用?我的文本文件是MacRoman,需要将其转换为UTF-8。我需要使用iconv。是的,但为什么必须使用iconv?为什么不允许任何其他选择?可能有更简单的方法,不需要使用iconv。这就是我的要求!!这就是为什么它应该是iconv。转换MacRoman的要求不是使用iconv的要求。Win32 API可以进行此转换,icu4c也可以。您是否有理由必须使用iconv,而不是以其他方式进行转换?我的文本文件是MacRoman,需要将其转换为UTF-8。我需要使用iconv。是的,但为什么必须使用iconv?为什么不允许任何其他选择?可能有更简单的方法,不需要使用iconv。这就是我的要求!!这就是为什么它应该是iconv。转换MacRoman的要求不是使用iconv的要求。Win32 API可以进行这种转换,icu4c也可以。我有MacRoman中的文本文件,需要将其转换为UTF-8。我需要使用iconv。如果我必须使用MultiByteToWideChar,我需要使用wchar\t字符串,对吗?我不确定我的编译器是否支持这一点。字符集被设置为使用多字节字符集,公共语言运行时支持被设置为无公共语言运行时支持。您需要临时缓冲区wchar_t。const int nBufLen=MultiByteToWideCharCP_UTF16,0,macRomanString.c_str,-1,NULL,0,NULL,NULL;const int err=WideCharToMultiByteCP_UTF8,0,unicodeString.c_str,-1,temp,nBufLen,NULL,NULL;这行得通吗?不,你要的不是CP_UTF16,而是我链接的页面上mac roman的号码。我有MacRoman的文本文件,我需要将其转换为UTF-8。我需要使用iconv。如果我必须使用MultiByteToWideChar,我需要使用wchar\t字符串,对吗?我不确定我的编译器是否支持这一点。字符集被设置为使用多字节字符集,公共语言运行时支持被设置为无公共语言运行时支持。您需要临时缓冲区wchar_t。const int nBufLen=MultiByteToWideCharCP_UTF16,0,macRomanString.c_str,-1,NULL,0,NULL,NULL;const int err=WideCharToMultiByteCP_UTF8,0,unicodeString.c_str,-1,temp,nBufLen,NULL,NULL;这行得通吗?不,你要的不是CP_UTF16,而是我链接页面上mac roman的号码。我也很困惑,如果我不想让你们太困惑的话,让我在这里说清楚。我有一个德语文本文件,我不确定它是MacRoman还是ASCII。但我需要把它转换成UTF-8。我对这些文本格式是完全陌生的。如果是德语,它就不是ASCII,因为它没有相同的字符,例如那些带有umlauts的字符。但是,在不知道编码/代码页的情况下,我不确定是否可以正确转换它。好的,还有其他方法可以将该文件转换为UTF 8吗?首先,您需要知道原始的co
德佩奇。您可以通过将例如“ö”的值与Win-1250代码页的Mac Roman中的值进行比较来找到它。当你知道这一点时,就使用bmargulies在回答中提到的API。我也很困惑,如果我没有让你们太困惑的话,让我在这里说清楚。我有一个德语文本文件,我不确定它是MacRoman还是ASCII。但我需要把它转换成UTF-8。我对这些文本格式是完全陌生的。如果是德语,它就不是ASCII,因为它没有相同的字符,例如那些带有umlauts的字符。但是,在不知道编码/代码页的情况下,我不确定是否可以正确转换它。好的,还有其他方法可以将该文件转换为UTF 8吗?首先,您需要知道原始代码页。您可以通过将例如“ö”的值与Win-1250代码页的Mac Roman中的值进行比较来找到它。当您知道这一点时,只需使用bmargulies在回答中提到的API。