ドイツ語の文字列をiconvを使用してUTF-16に変換しようとしていますが、無駄です。ここではそのためのコードです:iconvを使用してエンコードを変換できません
は#include <iconv.h>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <errno.h>
using namespace std;
const size_t BUF_SIZE=1024;
class IConv {
iconv_t ic_;
public:
IConv(const char* to, const char* from)
: ic_(iconv_open(to,from)) { }
~IConv() { iconv_close(ic_); }
bool convert(char* input, char* output, size_t& out_size) {
size_t inbufsize = strlen(input)+1;
return iconv(ic_, &input, &inbufsize, &output, &out_size);
}
};
int main(void)
{
char str1[BUF_SIZE] = "tägelîch";
char str2[BUF_SIZE] = "something else";
IConv ic("en_US.UTF-8","UTF16LE");
bool ret;
cout << str1 << endl;
size_t outsize = BUF_SIZE; //you will need it
ret = ic.convert(str1, str2, outsize);
if (ret == false) {
cout << "iconv failed: " << errno << endl;
return -1;
}
cout << str2 << endl;
}
出力:エンコーディングからタイプがISO-8859-1
に変更された場合
$ ./a.out
tägelîch
something else
が、結果は同じです。一方
は、iconvのユーティリティは、コマンドプロンプトから正常に動作します:
$ echo "TägelîcH" | iconv -f "ISO-8859-1" -t UTF-16LE
T▒▒gel▒▒cH
iconv --list
ISO-8859-1
と
UTF-16LE
の両方がサポートされていることを示しています。私は何が欠けていますか?
C++はこの動作の原因になりますか?
ありがとうございます!
コードの誤りを指摘してくれてありがとう。今はうまくいく。 – Maddy