2017-11-06 10 views
0

PHP 코드에서 외부 DLL로부터 COM 개체를 인스턴스화했습니다. com 개체 메서드 중 하나에서 JSON 문자열을받는 데 문제가 있다는 것을 제외하고는 제대로 작동합니다.PHP에서 COM 객체를 사용하여 UTF-8 문자열을 가져 오는 방법은 무엇입니까?

문자열에 비 라틴 문자가없는 경우 얻을 수있는 JSON은 정확하지만 UTF-8 인코딩을 필요로하는 비 라틴 문자가 하나 이상 있으면 COM 개체에서 수신 한 JSON을 구문 분석 할 수 없습니다. PHP. json_last_error()는 UTF-8 인코딩 문제를 보여줍니다.

COM 개체가 다른 환경에서 사용되는 것처럼 올바르게 인코딩 된 문자열을 반환한다는 것은 긍정적입니다.

받은 문자열 내용을 확인할 때 비 라틴 문자가 이상하고 잘못된 방식으로 "인코딩 됨"인 것은 분명합니다. COM 객체 내에서 동일한 문자열을 검사 할 때 PHP로 전송되기 바로 전에 올바르게 인코딩됩니다.

PHP와 COM 객체 통신이 아닌 UTF-8 인코딩을 사용하여 문자열이 엉망인 것처럼 보입니다.

COM 개체에서 UTF-8을 사용하는 것과 관련된 유일한 일은 php.ini의 [COM] 섹션에 com.code_page = UTF-8을 설정하는 것입니다. 그러나 이것이 어떻게 설정되었는지에 관계없이 나는 똑같은 나쁜 행동을합니다.

COM 개체에서 적절한 인코딩 된 UTF-8 문자열을 얻으려면 어떻게해야합니까?

답변

1

글쎄, 대답은 내 눈 바로 앞에 있었다, 난 그냥 간과 :

COM :: __ 구조 (문자열 $ 모듈 이름 [, 혼합 $의 서버 _ [INT의 $ 코드 페이지 [문자열 $ 형식 라이브러리]]])

코드 페이지 매개 변수가 있습니다. CP_UTF8로 설정하면 작동합니다.

서버가 사용되지 않으면 $ server_name이 NULL이어야합니다.

+0

COM에서는 문자열이 UTF-16을 사용하는 BSTR 일 가능성이 큽니다. 하지만 브리징 기능에서 코드 변환하는 방법을 찾았습니다. –

+0

Doc는 기본값이 ANSI라고 말하지만 UTF-16이 다른 것일 수도 있습니다. 텍스트 편집기가 해당 문자열을 제대로 표시 할 수 있으므로 처리 방법을 알았 기 때문입니다. –