Вход | Регистрация
 

С/С++ конвертация из char* UTF-8 в wchar_t* UTF-16LE

С/С++ конвертация из char* UTF-8 в wchar_t* UTF-16LE
Я
   Garykom
 
27.06.19 - 15:06
Требуется С/С++ конвертация из char* UTF-8 в wchar_t* UTF-16LE

Собственно как проще всего, желательно кроссплатформенно, но хватит и под VS для Windows.
 
 
   trdm
 
1 - 27.06.19 - 15:15
(0) Qt
   crasler
 
2 - 27.06.19 - 15:25
iconv
   Garykom
 
3 - 27.06.19 - 15:26
Я просил простейший это примерно как сказать ICU или MultiByteToWideChar
   Garykom
 
4 - 27.06.19 - 15:28
(2) Пример?
У меня есть проект ВК на C++ (под VS2017) как туда это сделать?
   Garykom
 
5 - 27.06.19 - 15:29
Блин гуглить то я умею, я пока далеко не сеньор С++ и даже не мидл а только на уровне джуна блин.
   crasler
 
6 - 27.06.19 - 15:30
(3)
#include <iostream>
#include <fstream>
#include <iconv.h>

int main(int argc, char *argv[])
{
    char src[] = "abcčde";
    char dst[100];
    size_t srclen = 6;
    size_t dstlen = 12;

    fprintf(stderr,"in: %s\n",src);

    char * pIn = src;
    char * pOut = ( char*)dst;

    iconv_t conv = iconv_open("UTF-8","UTF-16LE");
    iconv(conv, &pIn, &srclen, &pOut, &dstlen);
    iconv_close(conv);

    fprintf(stderr,"out: %s\n",dst);
}
   Вафель
 
7 - 27.06.19 - 15:30
и что на stack'е нет ответа?
   Garykom
 
8 - 27.06.19 - 15:31
(6) iconv.h для VS где взять? Как прилинковать в DLL ?
   Garykom
 
9 - 27.06.19 - 15:32
(6) И это только проблему кодировки решит а еще надо wchar_t* на выходе вместо char*
   ДенисЧ
 
10 - 27.06.19 - 15:32
 
 Рекламное место пустует
   H A D G E H O G s
 
11 - 27.06.19 - 15:33
Я знал, что увижу эту тему.
   Garykom
 
12 - 27.06.19 - 15:33
(10) Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
   crasler
 
13 - 27.06.19 - 15:33
(9) Что трудно wchar_t *w = (wchar_t*) pOut
http://gnuwin32.sourceforge.net/packages/libiconv.htm
   Garykom
 
14 - 27.06.19 - 15:34
(11) Я тоже поэтому и отложил сначала и тему поднимал.
С++ придумывали одни извращенцы для того чтобы другие хорошенько полюбились.

Как было замечательно даже на паскале...
   Garykom
 
15 - 27.06.19 - 15:38
(13) В голанге это выглядит так:

//cstr := C.CString(data)

//defer C.free(unsafe.Pointer(cstr))
ws, err := wchar.FromGoString(data)
if err != nil {
  w.Write([]byte(err.Error()))
  fmt.Println(err)
} else {
  w.Write([]byte(data))
}
C.invoke(C.closure(AddInFunc), (*C.wchar_t)(ws.Pointer()))

   Garykom
 
16 - 27.06.19 - 15:38
(15) к (14)
   Garykom
 
17 - 27.06.19 - 15:39
(12) Блин забыл в ""

Искать я умею в инете, вот рабочего нихрена нет чтобы из коробки взлетело без обработки напильником.
   Garykom
 
18 - 27.06.19 - 15:43
Короче чтобы в Go у меня уже конвертится и передается в С++ готовый *C.wchar_t

Но хочу этот функционал перенести в С++ часть, выкинув из Golang, чтобы там просто строки в UTF-8 были и все.
   Garykom
 
19 - 27.06.19 - 15:45
Ни у кого нет исходников ВК на С++ с ICU внутри?
По типу https://habr.com/ru/post/145187/
   H A D G E H O G s
 
20 - 27.06.19 - 16:05
Жил бы на Дельфи, бед бы не знал.
   Вафель
 
21 - 27.06.19 - 16:13
а что на самом Го нельзя компоненту написать?
   H A D G E H O G s
 
22 - 27.06.19 - 16:16
(21) Это типа ведроявы наверное, язык от Пабло Глиномесси, для смузевых мальчиков. Что то низкоуровневое - только через jni и C++
   Вафель
 
23 - 27.06.19 - 16:18
(22) ну тс же на го пишет, а с++ как переходник
   Garykom
 
24 - 27.06.19 - 16:19
(21) Если бы 1С не хотело в ВК классы и С++ то можно было бы, чистый C оно прекрасно эмулирует.
   Garykom
 
25 - 27.06.19 - 16:20
(22) Ошибаешься все низкоуровневое есть, вот нет эмуляции классов С++ с их извратами.
   Garykom
 
26 - 27.06.19 - 16:21
(23) Угу вынужденно.

Кто покажет исходники ВК для 1С на чистом "С" без "++" будут благодарен в разумных пределах даже.
   Garykom
 
27 - 27.06.19 - 16:23
(26) "Каждый объект компоненты должен наследоваться от абстрактного класса IComponentBase (файл ComponentBase.h входит в комплект поставки) и реализовать все его методы."
   Вафель
 
28 - 27.06.19 - 16:25
а что получается компонеты можно только на С++ писать? на той же делфе уже нельзя?
   Garykom
 
29 - 27.06.19 - 16:28
(28) А вот это интересный вопрос как там это сделано.
Вроде видел NativeAPI на Delphi/Lazarus
   Garykom
 
30 - 27.06.19 - 16:42
(29)+ https://github.com/Zawullon/fpnativeapi/blob/master/componentbase.inc

Я же задолбаюсь это эмулировать...
   Вафель
 
31 - 27.06.19 - 16:43
ну а что хорошая задачка для глубокого понимания го.
хоть 1 язык может далее джуна выучишь )))
   Garykom
 
32 - 27.06.19 - 16:50
(31) Объясни науй мне знать C++ далее джуна?

Когда я на уровне сеньора и мидла знаю уже несколько других!
   Garykom
 
33 - 27.06.19 - 16:51
(32)+ По C++ у меня кстати знания самые херовые из всех языков, примерно так же только еще питон знаю.
 
 
   Вафель
 
34 - 27.06.19 - 16:54
(31) вроде речь про Го была
   Garykom
 
35 - 27.06.19 - 16:55
(34) По Go я уже на уровне близко к мидлу, далеко от джуна
   Garykom
 
36 - 27.06.19 - 16:56
На Го я легко сконвертил требуемое и передал в код С++ а тот вернул в 1С и все отобразилось ок.
   Garykom
 
37 - 27.06.19 - 16:56
Как это сделать в С++ ? Без Го.
   Garykom
 
38 - 28.06.19 - 03:40
Сделал под Windows через MultiByteToWideChar
wchar_t* CAddInNative::Conv(char *source) {
    char *pString = source;
    wchar_t *result = NULL;
    int nSize = MultiByteToWideChar(CP_UTF8, 0, pString, -1, NULL, 0);
    if (nSize != 0)
    {
        if (m_iMemory && source)
        {
            if (m_iMemory->AllocMemory((void**)&result, nSize * sizeof(wchar_t))) {
                MultiByteToWideChar(CP_UTF8, 0, pString, -1, result, nSize);
            }
        }
    }
    return result;
}

   Garykom
 
39 - 28.06.19 - 03:49
(38)+ Под Linux iconv штатно пашет, что делать с Android и iOS пока хз.
   Сияющий в темноте
 
40 - 28.06.19 - 08:47
В чем сложность пройти по строке и разобрать вручную?
опять же,не надо будет внешние библиотеки цеплять.если хочется красиво,то пройти два раза-посчитать количество символов-первый раз,потом выделить память и пройти еще раз с записью результата.

вот в json через Ascii сложнее,но тоже можно.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует