반응형
[C++] 한글 깨짐 해결
모니터 출력 한글 깨짐 : UTF8ToANSI 메소드로 해결
LPCWSTR 에러 : 프로젝트 설정
1) 참고
이 문제 해결을 위해 구글링하고 참고했던 내용들은 아래 페이지들에 기록.
[C++] UTF8 <-> ANSI 문자셋 변환 http://blog.daum.net/andro_java/797
[C++] string <-> char* 형변환 http://blog.daum.net/andro_java/795
[C++] "CHAR*" 형식의 인수가 "LPCWSTR" 형식의 매개변수와 호환되지 않습니다. http://blog.daum.net/andro_java/796
[C++] 동적 메모리 할당 - new/delete, new[]/delete[] http://blog.daum.net/andro_java/794
C++에서 stdafx.h/stdafx.cpp - precompiled header http://blog.daum.net/andro_java/793
2) 샘플 소스
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <WTypes.h >
#include <oleauto.h>
using namespace std;
char* UTF8ToANSI(const char *pszCode)
{
BSTR bstrWide;
char* pszAnsi;
int nLength;
nLength = MultiByteToWideChar(CP_UTF8, 0, pszCode, lstrlen(pszCode) + 1, NULL, NULL);
bstrWide = SysAllocStringLen(NULL, nLength);
MultiByteToWideChar(CP_UTF8, 0, pszCode, lstrlen(pszCode) + 1, bstrWide, nLength);
nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
pszAnsi = new char[nLength];
WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, pszAnsi, nLength, NULL, NULL);
SysFreeString(bstrWide);
return pszAnsi;
}
int main()
{
ifstream in("D:\\yoil.txt"); // 파일 읽기 준비
string buff;
if (in.is_open()) {
while (getline(in, buff)) { // 파일을 처음부터 끝까지 한줄씩 (마지막 \n 은 자동으로 제거됨) 읽음.
cout << UTF8ToANSI(buff.c_str()) << endl;
}
}
else {
cout << "파일을 찾을 수 없습니다!" << endl;
}
return 0;
}
3) 파일 쓰기
파일을 쓰는 프로젝트에서는 다음 페지에 소개한 ANSIToUTF8 메소드를 활용할 필요가 있을 것이다.
[C++] UTF8 <-> ANSI 문자셋 변환 http://blog.daum.net/andro_java/797
반응형
'Study: Software(SW) > SW: Error Bug Fix' 카테고리의 다른 글
[Error fix] userdel: user sjchoi is currently used by process 14356 (0) | 2022.08.05 |
---|---|
[Error Fix] invalid new-expression of abstract class type (feat. 추상 클래스) (0) | 2022.07.11 |
[Error Fix] CMake: undefined reference to 'BIO_write' (0) | 2022.07.07 |
[Error Fix] Ubuntu 18.04.04 해상도 변경 안 됨(feat 하나로 고정되어 있는 현상 해결) (0) | 2022.06.01 |
[Trouble Shooting] Git Authentication Failed 사용자 인증 문제 해결 (0) | 2022.04.17 |