C#은 4바이트를 차지하는 특정 중국어 문자를 처리합니다.

문자 집합 GB18030에는 4바이트의 중국어 문자가 있습니다. C#에서 이를 직접 읽으면 이 문제를 Windows API에서 제공하는 기능을 사용하여 해결해야 합니다.

1. Windows API는 GB18030-2000을 지원합니다.

다음 Windows API는 GB18030-2000에 대한 지원을 제공합니다. IsValidCodePage(), GetCPInfo(), MultiByteToWideChar() 및 WideCharToMultiByte().

세부 사항은 다음과 같습니다.

1) IsValidCodePage(54936)는 TRUE를 반환합니다.

2) GetCPInfo(54936, lpCPInfo)는 TRUE를 반환합니다.

3) MultiByteToWideChar(54936, 0, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar)는 GB18030-2000 문자열 lpMultiByteStr을 유니코드 문자열 lpWideCharStr로 변환하는 작업을 완료합니다.

4) WideCharToMultiByte(54936, 0, lpWideCharStr, cchWideChar, lpMultiByteStr, cbMultiByte, lpDefaultChar, lpUsedDefaultChar)는 유니코드 문자열 lpWideCharStr을 GB18030-2000 문자열 lpMultiByteStr로 변환하는 작업을 완료합니다.

2. GB18030 함수 라이브러리

Microsoft 4-byte Character Set Encoding Support Package(MS4BSP-Microsoft 4-byte Character Set Encoding Support Package)는 다음 6가지 기능을 제공합니다. 멀티바이트로 인코딩된(최대 4바이트) 문자열. 이러한 API는 Windows 95/98/Me에서 제공하는 WCHAR(유니코드) 기능 세트에서 선택됩니다. 함수 이름은 접미사 'A' 또는 'W'가 'L'로 대체된다는 점을 제외하면 해당 ANSI 및 WCHAR(유니코드) 함수와 정확히 동일합니다. 이 기능의 매개변수는 해당 'A' 버전 기능의 매개변수 인터페이스와 정확히 동일합니다. 이 지원 패키지를 사용하면 936 코드 페이지 기반 애플리케이션을 GB18030 또는 기타 4바이트 인코딩으로 더 빠르게 변환할 수 있습니다.

MS4BSP는 Windows XP 플랫폼에서 간단한 동적 링크 라이브러리(ms4bsp.dll)로 구현됩니다. 각 함수는 MultiByteToWideChar() 함수를 호출하여 멀티바이트 문자열 입력 매개변수를 UTF-16 인코딩으로 변환한 다음 함수의 해당 'W' 버전을 호출하여 함수의 출력 매개변수를 반환합니다. 이 동적 링크 라이브러리는 현재 시스템에 관련 글꼴, 입력 방법(IME) 및 레지스트리 설정 정보가 존재한다고 가정합니다.

이 기능 세트의 기본 4바이트 문자 인코딩은 54936(GB18030-2000)입니다. MS4BL의 향후 버전은 다른 4바이트 인코딩을 지원할 수도 있습니다.

인터페이스 목록:

CODEBOOL ExtTextOutL(

HDC hdc, // DC에 대한 핸들

int X, // x 좌표 기준점

int Y, // 기준점의 y 좌표

UINT fuOptions, // 텍스트 출력 옵션

CONST RECT* lprc, / / 선택적 차원

LPCSTR lpString, // 문자열

UINT cbCount, // 문자열의 문자 수

CONST INT* lpDx // 간격 값 배열

);

BOOL GetTextExtentExPointL(

HDC hdc, // DC에 대한 핸들

LPCSTR lpszStr, // 문자열

p>

int cchString, // 문자 수

int nMaxExtent, // 형식화된 문자열의 최대 너비

LPINT lpnFit, // 최대 문자 수

LPINT alpDx, // 부분 문자열 너비의 배열

LPSIZE lpSize // 문자열 크기

);

BOOL GetTextExtentPoint32L(

< p>HDC hdc, // DC에 대한 핸들

LPCSTR lpString, // 텍스트 문자열

int cbString, // 문자열의 문자

LPSIZE lpSize // 문자열 크기

);

Int MessageBoxL(

HWND hWnd, // 소유자 창에 대한 핸들

LPCSTR lpText, // text 메시지 상자에서

LPCSTR lpCaption, // 메시지 상자 제목

UINT uType // 메시지 상자 스타일

);

Int MessageBoxExL (

HWND hWnd, // 소유자 창 핸들

LPCSTR lpText, // 메시지 상자의 텍스트

LPCSTR lpCaption, // 메시지 상자 제목

p>

UINT uType, // 메시지 상자 스타일

WORD wLanguageId // 언어 ID

ifier

);

BOOL TextOutL(

HDC hdc, // DC에 대한 핸들

int nXStart, // x 좌표 시작 위치

int nYStart, // 시작 위치의 y 좌표

LPCSTR lpString, // 문자열

int cbString // 문자 수< /p>

);