Внешняя компонента, в сканируемый штрихкод добавляются китайские символы

1. Qarasique 05.11.21 08:04 Сейчас в теме
Всем привет! Использую 1С на планшете, к которому подключил usb-сканер. Для планшета сделал внешнюю компоненту, которая подключает usb-сканер к планшету и получает ШК при сканировании. Проблема в том, что в 1С в штрихкоде появляются кракозябры:

При сканировании в мобильном приложении (на Java) вызывается dcssdkEventBarcode:
public static native void OnBarcodeScan(long pObject, byte[] barcodeData);

@Override
    public void dcssdkEventBarcode(byte[] barcodeData, int barcodeType, int fromScannerID) {
        Log.e("RSUSB", "Sending barcode: " + new String(barcodeData));
        OnBarcodeScan(m_V8Object, barcodeData);
    }
Показать

Через logcat вижу, что на данном этапе штрихкод корректный.
Далее в С++ :
extern "C" JNIEXPORT void JNICALL Java_rs_usbscan_RSUsbScanDriver_OnBarcodeScan(JNIEnv * env, jclass jClass, jlong pObject,
	jstring barcode)
{
	IAddInDefBaseEx* pAddIn = (IAddInDefBaseEx*)pObject;

	std::wstring barcode_w = jstring2wstring(env, barcode);

	pAddIn->ExternalEvent(s_EventSource, s_EventName, WcharWrapper(barcode_w.c_str()));
}
std::wstring jstring2wstring(JNIEnv* jenv, jstring aStr)
{
	std::wstring result;

	if (aStr)
	{
		const jchar* pCh = jenv->GetStringChars(aStr, 0);
		jsize len = jenv->GetStringLength(aStr);
		const jchar* temp = pCh;
		while (len > 0)
		{
			result += *(temp++);
			--len;
		}
		jenv->ReleaseStringChars(aStr, pCh);
	}
	return result;
}
Показать

Т.е., предположительно, штрихкод портится в С++ коде. Что делаю не так?(
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 07.11.21 18:36 Сейчас в теме
(1) на вскидку - проблема в кодировке. jstring это utf-8. А c_str()? Часть символа utf-8 разбивается и получается белиберда.
Qarasique; +1 Ответить
4. spacecraft 07.11.21 19:14 Сейчас в теме
(1) попробуйте заменить методы работы с символами на utf аналоги.
GetStringChars на GetStringUTFChars
GetStringLength на GetStringUTFLength
ReleaseStringChars на ReleaseStringUTFChars
Qarasique; +1 Ответить
2. ВасяЧ 07.11.21 18:13 Сейчас в теме
Ты крут!

Но на одинесном форуме про С++ спрашивать, так себе)

А что делает в отладчике эта тарабарщина:

result += *(temp++);
--len;
?
Qarasique; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот