C 언어 또는 C++ 언어에서는 문자열 인코딩을 처리할려면 무척 애을 먹는다.
반면에 Java 언어나 Python 언어에서는 문자열 인코딩 문제가
일치 감치 해결되어 있으므로 조금만 주의하면 별 어려움이 없다.
우선 간단한 Python 소스를 보자.
# -- coding: utf=8 -*-
greetings = [
"Hello~", # English
"안녕하세요?", # Korean
"んにちは。", # Japanese
"您好!" # Chinesse
]
for msg in greetings:
print(msg)
"""
Output:
Hello~
안녕하세요?
んにちは。
您好!
"""
위의 소스를 저장할 때 utf8 인코딩으로 저장하면
실행 시에 터미널 환경의 문자셋 여부에 상관없이 정상적으로 잘 출력된다,
그러너 C 언어나 ㅊ++ 언어의 경우레는 문자열을 처리하는 방식이 너무나 다양하여
환경에 따라 정확한 처리 방식을 찾는데 꽤 고생하게 된다.
여기에 그런 수고를 덜기 위한 (중국어 간체 때문에 다소(?) 불완전한) 팁을 소개한다.
아래의 소스는 윈도우 10 환경에서
Visual Studio 2019 의 명령줄(command line) 컴파일러 cl 및
MinGW64 의 컴파알러 g++ 로 테스트된 C++ 소스이다
// Filename: helloUTF8_002.cpp
//
// This source should besaved as utf-8 file=encoding.
//
// Compile: g++ -o helloUTF8_002 helloUTF8_002.cpp
// Execute: ./helloUTF8_002
// Or
// Compile: cl helloUTF8_002.cpp /EHsc /utf-8 /std:c++17
// Execute: helloUTF8_002.cpp
// Output:
// Hello~
// 안녕하세요?
// んにちは。
// ?好!
//
// Date: 2021.01.23
#include <iostream>
#include <cstddef>
#include <locale>
#include <stdio.h>
#include <wchar.h>
int main(void)
{
const std::wstring greetings[] = {
L"Hello~", // English
L"안녕하세요?", // Korean
L"んにちは。", // Japanese
L"您好!" // Chinesse
};
setlocale(LC_ALL,""); // <--- works both on cmd of Windows 10 and mys64 terminal of Windows 10
/////////////////////////////////////////////////
// Get the counting of an array of wstrins
// int size = (int) size(greetings); // <--- works on vc++, but nor on g++
int size = *(&greetings+1)-greetings;
for (int i = 0; i < size; ++i)
{
wprintf(L"%lS\n", (wchar_t *)&(greetings[i][0]));
/// wprintf(L"%ls\n", (wchar_t *)&(greetings[i][0]));
// std::wcout << greetings[i] << std::endl;
}
return 0;
}
중국어 간체 您가 정상적으로 출력되지 않는 문제점이 아직 해결되지 않았다.
문자 您를 你로 바꾸어도 마찬가지이다.
Python 소스로는 잘 출력되는 것을 보면 터미널의 폰트 문제는 아난 것 같다.
'프로그래밍 > C++' 카테고리의 다른 글
Boost Library를 이용하여 임의의 정밀도를 갖는 부동소수점수 계산하기 (0) | 2021.03.29 |
---|---|
new 키워드로 생성된 배열의 크기 변경하여 재할당하기 (0) | 2021.02.24 |
C++ 에서 C 함수를 불러 사용하기 (0) | 2021.01.07 |
cygwin 의 g++ 로 UTF-8 한글 처리하는 간단한 예제 (0) | 2014.04.13 |
cygwin 의 g++ 로 utf-8 문자열 거꾸로하기 (0) | 2014.04.10 |