C# 유니 코드 문자열을 COM 객체의 속성에 전달하려고 시도하는 Autodesk Navisworks 용 플러그인을 작성하고 있습니다. 그러나 문자열이 프로세스의 어딘가에 잘못 인코딩됩니다.C#에서 COM Interop을 통해 문자열을 마샬링 할 때 인코딩이 실패합니다 (double UTF8 인코딩?)
var property = ...;
property.Name = "中文"; // becomes "??"
property.Value = "中文"; // OK
"中文"가 "??" ASCII로 제한된 문자열은 정상적으로 작동합니다 (예 : "abcd"). 또한 동일한 객체에 Value-property (VARIANT)를 설정하면 이름이 아니라 제대로 작동합니다. A (유니 코드) 문자열로이 어떻게 든
C3 A4
와 "인코딩":
property.Name = "\u00c3\u00a4"; // shows up as "ä"
놀랍게도이
또한 탐사는 UTF-8 문자열 "A"를 인코딩하려고 날 리드 일하는 것처럼 보였다.
이
다음과 같은 시도를 알려준 : 그러나var bytes = Encoding.UTF8.GetBytes("中文abcd");
char[] chars = new char[bytes.Length];
for(int i = 0; i < chars.Length; i++)
chars[i] = (char)bytes[i];
string s = new string(chars);
, 나는이 인코딩하려고 사용 "中文 ABCD"나는 첫 번째 문자를 얻을 "中"의 GUI. 그러나 "äabcd"를 사용하면 다시 한 명 이상의 캐릭터를 만나게됩니다 ...
무슨 일이 일어나고 계십니까? 문제를 어떻게 해결할 수 있습니까? 마샬링 문제입니까 (예 : COM Interop에서 잘못 지정된 인코딩)? 또는 응용 프로그램 내부의 이상한 코드일까요? 마샬링 문제인 경우이 속성에 대해서만 수정할 수 있습니까?
출력을 16 진수로 덤프 할 수 있습니까? 이게 어디로 갈지 생각 중이에요. – dda