У меня есть tar-файл, который содержит многобайтовые символы (японский). Я использую libarchive, чтобы распаковать файл. Имена файлов внутри файлов tar кодируются с использованием utf-8. Когда я пытаюсь распаковать файл, результат всегда теряет многобайтовые символы.
Я написал скрипт на Python для достижения моего результата, который работал
#!/usr/bin/python27
import tarfile
import pdb
def transform(data):
u = data.decode('utf8')
pdb.set_trace()
#return u.encode('utf8')
return u
tar = tarfile.open('abc.tar')
for m in tar.getmembers():
print m.name
m.name = transform(m.name)
#print m.name
tar.extractall()
Однако я хочу добиться того же в c ++. Это фрагмент кода cpp
while (entry = tar_file->nextEntry()) {
fs::path filepath = path / entry->getFileName(); // loose the utf-8 character s here
// So I tried the following
int wchars_num = MultiByteToWideChar( CP_ACP , 0 , filepath.string().c_str() , -1, NULL , 0 );
wchar_t* wstr = new wchar_t[wchars_num];
//I tried UTF-8 as well in place of CP_ACP
MultiByteToWideChar( CP_ACP , 0 , filepath.string().c_str() , -1, wstr , wchars_num );
// But this did not help
Задача ещё не решена.
Других решений пока нет …