문제

현재 소켓을 통해 C# 응용 프로그램에 통신하는 C ++ 응용 프로그램을 구축하고 있습니다. 내 C ++ 앱은 소켓을 통해 wchar_t*를 보냅니다.

다음은 보내는 내용에 대한 개요입니다.

<!-- Normal xml file-- 

다음은 다른 쪽에서받는 것입니다 (스트림을 수행하고 바이트 배열로 읽고 utf8encoding.getstring ()을 사용하여 바이트 배열을 읽을 수있는 문자열로 변환합니다)

<\0!\0-\0-\0 \0N\0o\0r\0m\0a\0l\0 \0x\0m\0l\0 \0f\0i\0l\0e\0-\0-

마샬링 문제입니까? 당신은 무엇을 말합니까? 왜 0 확장이고 유니 코드 카라서가 C# 측에 나타나지 않는 이유는 무엇입니까?

도움이 되었습니까?

해결책

UTF-8이 아닌 UTF-16을 보내는 것 같습니다. wchar_t 기본적으로 16 비트 유형 (Windows)이며, 내가 알 수있는 한 "RAW"를 보내고 있습니다. 데이터를 XDocument 또는 XmlDocument, 바이너리 데이터로 수행합니다. 프레임 워크는 XML 파일 (IIRC)의 UTF -16을 자동으로 설정하는 방법을 알고 있습니다.

XML 선언이 실제로 UTF-16 인 경우 UTF-8이라고 선언하면 문제가있을 수 있습니다.

또는 C ++ 측에서 적절한 인코딩 클래스를 사용하십시오. 진심으로 UTF-8을 보내십시오. 추가 처리 시간이 걸리지 만 일반적으로 고려 사항 인 경우 대역폭을 절약합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top