C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75385] Re:Re: 퍼갑니다
[] 2607 읽음    2019-04-27 10:36
AnsiStringT<949>  이런 방법이 있다는거 처음 알았습니다
빌더님 퍼가도 되죠

뽀뽀중 님
다운로드 안되는데요




빌더(TWx) 님이 쓰신 글 :
: 뽀뽀중 님이 쓰신 글 :
: : 한글윈도우10 에서 프로그램을 작성 하였습니다.
: :
: : 아래와 같이 코드를 작성을 하여 text 파일을 일고 쓰고 하였습니다. 한글 윈도우에서는 문제 없이 정상입니다.
: :
: : 그런데, 영문윈도우에 한글언어팩을 설치 하여 한글을 사용중인데.
: : 프로그램을 실행을 하면,  text 파일을 읽지 못합니다.
: :
: : 아마도 글자 코드가 다르게 되어 발생한 문제 인것 같습니다.
: : 같은 코드를 여러곳에 사용을 하여, 일일이 수정 하기가 힘든데 쉽게 해결하는 방법이 있나요?
: :
: : string sTemp;
: : ifstream Fin;
: :
: : Fin.open(GFileName.c_str());
: : while (getline(Fin, sTemp)) { // text를 읽지를 못합니다.
: :    //text 파일 읽는 코드
: :  }
: :
: :
:
:
: 답변:
:
:
: 다음 부터 질문할 때는...
:
: 질문의 키포인트를 확정할 수 있는 해당 파일을 같이 첨부하세요.
: "읽지 못하는 텍스트" 파일을 같이 첨부해서 올려야 encoding scheme 문제인지
: 아니면 코드페이지가 달라서 일어나는 문제인지 확정 할 수 있을 거 아닙니까.
:
: 소스코드 에디터를 만들 때... 가장 먼저 구현해야 하는 부분이...
: 해당 파일이 어떤 encoding 방식을 사용하고 있는가를 디렉트하는 루틴 작성이고
: bom 마커를 갖고있으면 쉽게 해당 파일의 encoding 방식을 판단할 수 있으나...
: 그렇지 않을 경우에는 파일 전체를 스캔해서 문자코드가 특정 encoding 방식에서
: 지원되는 문자셋으로 표현될 수 있는가를 휴레스틱 알고리즘을 구현해서 지능적으로 판단해야 합니다.
:
:
: 본론으로 돌아와서...
:
: std::wifstream 을 사용하지 않고...
: std::ifstream 을 사용한 것으로 보아서는...
:
: MBCS 형식으로 파일을 다루는 것 같은데...
:
: 한글과 영문 버전의 OS는 시스템 디폴트 코드페이가 서로 다릅니다.
: 한글 버전으로 설치하면 시스템 디폴트 코드페이지로 cp 949 가 적용되어 한글표현이 자유롭지만
: 영문 버전에선 다른 코드페이지가 적용되어 한글이 깨지게 됍니다.
:
: 한글 버전 윈도우즈 시스템에서 MBCS(Ansi) 형식으로 작성된 텍스트 파일을
: 영문 버전의 윈도우즈 시스템에서 읽으면 한글 언어팩을 설치하더라도
: 다른 시스템 디폴트 코드페이지가 적용되기 때문에 한글이 깨지게 됩니다.
:
: #include <fstream>
: #include <sstream>
:
:    using namespace std;
:    ifstream ifs("c:/test/test.txt"); // MBCS 형식의 파일
:
:    stringstream strs; strs << ifs.rdbuf();
:
:    while(strs) {
:       std::string s; strs >> s;
:       Memo1->Lines->Add( AnsiStringT<949>(s.c_str()) ); // 한 라인씩 cp 949 코드페이지 적용해서 처리.
:    }
:
: 따라서...
:
: 한글 버전 OS에서 cp 949 코드페이지가 적용되어 작성되어 있는 MBCS 형식의 텍스트 파일을
: 한글 언어팩이 설치되어 있는 영문 윈도우즈 시스템에서 정상적으로 읽기 위해선
: 위와 같이 cp 949를 적용해서 처리해야 합니다.
:
:
: 시스템 메뉴 등의 문자는 영문으로 표시되게 하면서, 한글도 사용할 수 있게 하기위해
: 영문 OS 에 한글언어팩을 설치해서 사용하려는 의도인가 본데...
:
: 위와 같은 변환 코드가 번거로우면...
:
: 윈도우즈 10을 예로 들어서...
:
: 설정 - 언어 - 관리 언어 설정 - 관리자 옵션 - 시스템 로캘 변경...
:
: 으로 들어가서 유니코드가 아닌 MBCS 형식을 사용할 때 적용할 언어를 한국어로 바꿔놓으면
: 시스템 메뉴 등은 영문으로 표시하면서 디폴트 코드페이지가 CP 949로 적용되게 할 수 있습니다.
:
:
: STL 템플릿 이용하면 utf8, unicode (16bit, 32bit, little endian, big endian), char16_t, char32_t, BOM 마커 처리 등
: 모든 것들을 디테일 하게 처리 할 수도 있지요.
:
: 예)
:
:    ifs.imbue(std::locale(ifs.getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff,
:         std::codecvt_mode(std::little_endian|std::consume_header)>));
:
: 여기서 consume_header는 BOM 마커를 의미 함.
:
:
:
: 다음 부터 질문할 때는 요령있게 해당 파일도 같이 첨부해서 올려요.
:
:

+ -

관련 글 리스트
75377 영문 윈도우에서 텍스트 파일 읽기 뽀뽀중 2476 2019/04/24
75379     Re:영문 윈도우에서 텍스트 파일 읽기 빌더(TWx) 2888 2019/04/26
75385         Re:Re: 퍼갑니다 2607 2019/04/27
75380         Re:Re:영문 윈도우에서 텍스트 파일 읽기 뽀뽀중 2955 2019/04/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.