Microsoft MVP성태의 닷넷 이야기
VC++: 41. UTF-8 포맷의 INI 파일에 대한 GetPrivateProfile... API 사용 불가 [링크 복사], [링크+제목 복사],
조회: 44426
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)
UTF-8 포맷의 INI 파일에 대한 GetPrivateProfile... API 사용 불가

다음과 같은 이유로 인해서 시스템 설정을 바꿨기 때문에, 저는 습관적으로 파일을 UTF-8 포맷으로 저장합니다.

개발자 PC 환경 - 유니코드(Unicode)를 위한 설정
; https://www.sysnet.pe.kr/2/0/762

이런 습관이 안 좋을 때도 있군요. ^^ 최근에, 다음과 같은 Win32 API들을 사용하면서 고생 좀 했습니다.

  • GetPrivateProfileInt
  • GetPrivateProfileSection
  • GetPrivateProfileSectionNames
  • GetPrivateProfileString
  • GetPrivateProfileStruct

위의 API들에 UTF-8로 저장된 INI 파일을 지정하게 되면 무조건 NULL 값이 나오고, GetLastError 값은 2 (The system cannot find the file specified.)가 반환됩니다.

해결책은? 없습니다.

대신, UTF-8 포맷은 사용해서는 안되고 ANSI 파일로 저장하거나 UNICODE 파일로 저장하면 해결됩니다. 만약, 절대로 UTF-8 포맷을 고수하셔야 하는 상황이라면? 위의 API를 사용하지 마시고, 사용자 정의 INI Parser를 만들거나 그에 상응하는 라이브러리를 사용해야 합니다.



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/1/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2010-09-15 11시09분
[ryujh] 안녕하세요.

서명있는 UTF-8, 서명없는 UTF-8 모두 같은 현상입니까?
[guest]
2010-09-15 11시36분
이론상으로 보면. ^^
서명이 없다는 것은 BOM이 없으니 일반 ASCII 파일처럼 읽혀지겠지요. 그렇다면 영문 알파벳처럼 UTF-8에서도 동일한 코드값을 유지하는 문자들은 정상적으로 읽혀지겠지만, 한글과 같이 인코딩이 들어가는 값들은 모두 깨질 것입니다.
kevin25

... 31  32  33  34  35  36  37  38  39  40  41  42  43  44  [45]  ...
NoWriterDateCnt.TitleFile(s)
12930정성태1/19/202219491개발 환경 구성: 631. AKS/k8s의 Volume에 파일 복사하는 방법
12929정성태1/19/202220621개발 환경 구성: 630. AKS/k8s의 Pod에 Volume 연결하는 방법
12928정성태1/18/202219117개발 환경 구성: 629. AKS/Kubernetes에서 호스팅 중인 pod에 shell(/bin/bash)로 진입하는 방법
12927정성태1/18/202221193개발 환경 구성: 628. AKS 환경에 응용 프로그램 배포 방법
12926정성태1/17/202220119오류 유형: 787. AKS - pod 배포 시 ErrImagePull/ImagePullBackOff 오류
12925정성태1/17/202221909개발 환경 구성: 627. AKS의 준비 단계 - ACR(Azure Container Registry)에 docker 이미지 배포
12924정성태1/15/202222485.NET Framework: 1134. C# - ffmpeg(FFmpeg.AutoGen)를 이용한 비디오 디코딩 예제(decode_video.c) [2]파일 다운로드1
12923정성태1/15/202222534개발 환경 구성: 626. ffmpeg.exe를 사용해 비디오 파일을 MPEG1 포맷으로 변경하는 방법
12922정성태1/14/202221158개발 환경 구성: 625. AKS - Azure Kubernetes Service 생성 및 SLO/SLA 변경 방법
12921정성태1/14/202216914개발 환경 구성: 624. Docker Desktop에서 별도 서버에 설치한 docker registry에 이미지 올리는 방법
12920정성태1/14/202218122오류 유형: 786. Camtasia - An error occurred with the camera: Failed to Add Video Sampler.
12919정성태1/13/202218154Windows: 199. Host Network Service (HNS)에 의해서 점유되는 포트
12918정성태1/13/202219773Linux: 47. WSL - shell script에서 설정한 환경 변수가 스크립트 실행 후 반영되지 않는 문제
12917정성태1/12/202218796오류 유형: 785. C# - The type or namespace name '...' could not be found (are you missing a using directive or an assembly reference?)
12916정성태1/12/202217735오류 유형: 784. TFS - One or more source control bindings for this solution are not valid and are listed below.
12915정성태1/11/202218937오류 유형: 783. Visual Studio - We didn't find any interpreters
12914정성태1/11/202223327VS.NET IDE: 172. 비주얼 스튜디오 2022의 파이선 개발 환경 지원
12913정성태1/11/202223471.NET Framework: 1133. C# - byte * (바이트 포인터)를 FileStream으로 쓰는 방법 [1]
12912정성태1/11/202221901개발 환경 구성: 623. ffmpeg.exe를 사용해 비디오 파일의 이미지를 PGM(Portable Gray Map) 파일 포맷으로 출력하는 방법 [1]
12911정성태1/11/202218228VS.NET IDE: 171. 비주얼 스튜디오 - 더 이상 만들 수 없는 "ASP.NET Core 3.1 Web Application (.NET Framework)" 프로젝트
12910정성태1/10/202218529제니퍼 .NET: 30. 제니퍼 닷넷 적용 사례 (8) - CPU high와 DB 쿼리 성능에 문제가 함께 있는 사이트
12909정성태1/10/202219652오류 유형: 782. Visual Studio 2022 설치 시 "Couldn't install Microsoft.VisualCpp.Redist.14.Latest"
12908정성태1/10/202215923.NET Framework: 1132. C# - ref/out 매개변수의 IL 코드 처리
12907정성태1/9/202218121오류 유형: 781. (youtube-dl.exe) 실행 시 "This app can't run on your PC" / "Access is denied." 오류 발생
12906정성태1/9/202221270.NET Framework: 1131. C# - 네임스페이스까지 동일한 타입을 2개의 DLL에서 제공하는 경우 충돌을 우회하는 방법 [1]파일 다운로드1
12905정성태1/8/202220084오류 유형: 780. Could not load file or assembly 'Microsoft.VisualStudio.TextTemplating.VSHost.15.0, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
... 31  32  33  34  35  36  37  38  39  40  41  42  43  44  [45]  ...