Имя: Пароль:
IT
 
С/С++ конвертация из char* UTF-8 в wchar_t* UTF-16LE
0 Garykom
 
гуру
27.06.19
15:06
Требуется С/С++ конвертация из char* UTF-8 в wchar_t* UTF-16LE

Собственно как проще всего, желательно кроссплатформенно, но хватит и под VS для Windows.
1 trdm
 
27.06.19
15:15
(0) Qt
2 crasler
 
27.06.19
15:25
iconv
3 Garykom
 
гуру
27.06.19
15:26
Я просил простейший это примерно как сказать ICU или MultiByteToWideChar
4 Garykom
 
гуру
27.06.19
15:28
(2) Пример?
У меня есть проект ВК на C++ (под VS2017) как туда это сделать?
5 Garykom
 
гуру
27.06.19
15:29
Блин гуглить то я умею, я пока далеко не сеньор С++ и даже не мидл а только на уровне джуна блин.
6 crasler
 
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'е нет ответа?
8 Garykom
 
гуру
27.06.19
15:31
(6) iconv.h для VS где взять? Как прилинковать в DLL ?
9 Garykom
 
гуру
27.06.19
15:32
(6) И это только проблему кодировки решит а еще надо wchar_t* на выходе вместо char*
10 ДенисЧ
 
27.06.19
15:32
11 H A D G E H O G s
 
27.06.19
15:33
Я знал, что увижу эту тему.
12 Garykom
 
гуру
27.06.19
15:33
(10) Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
13 crasler
 
27.06.19
15:33
(9) Что трудно wchar_t *w = (wchar_t*) pOut
http://gnuwin32.sourceforge.net/packages/libiconv.htm
14 Garykom
 
гуру
27.06.19
15:34
(11) Я тоже поэтому и отложил сначала и тему поднимал.
С++ придумывали одни извращенцы для того чтобы другие хорошенько полюбились.

Как было замечательно даже на паскале...
15 Garykom
 
гуру
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()))
16 Garykom
 
гуру
27.06.19
15:38
(15) к (14)
17 Garykom
 
гуру
27.06.19
15:39
(12) Блин забыл в ""

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

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

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

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

Когда я на уровне сеньора и мидла знаю уже несколько других!
33 Garykom
 
гуру
27.06.19
16:51
(32)+ По C++ у меня кстати знания самые херовые из всех языков, примерно так же только еще питон знаю.
34 Вафель
 
27.06.19
16:54
(31) вроде речь про Го была
35 Garykom
 
гуру
27.06.19
16:55
(34) По Go я уже на уровне близко к мидлу, далеко от джуна
36 Garykom
 
гуру
27.06.19
16:56
На Го я легко сконвертил требуемое и передал в код С++ а тот вернул в 1С и все отобразилось ок.
37 Garykom
 
гуру
27.06.19
16:56
Как это сделать в С++ ? Без Го.
38 Garykom
 
гуру
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;
}
39 Garykom
 
гуру
28.06.19
03:49
(38)+ Под Linux iconv штатно пашет, что делать с Android и iOS пока хз.
40 Сияющий в темноте
 
28.06.19
08:47
В чем сложность пройти по строке и разобрать вручную?
опять же,не надо будет внешние библиотеки цеплять.если хочется красиво,то пройти два раза-посчитать количество символов-первый раз,потом выделить память и пройти еще раз с записью результата.

вот в json через Ascii сложнее,но тоже можно.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан