2014-09-20 4 views
0

리마인더를 표시하는 프로그램을 작성했습니다. 일부 프로그램은 스페인어로되어 있으며 일부는 영어로 작성되었습니다. 영어는 문제없이 표시되지만 스페인어에서는 악센트가있는 문자가 이상한 기호로 표시됩니다. 이것은 Windows7이 글리프를 처리 할 수 ​​없으므로 업그레이드가 필요하거나 ASCII 테이블이 잘못되었음을 의미합니까? 이 문제를 해결하려면 어떻게해야합니까? 당신이 UTF-8로 인코딩 된 텍스트를 표시하는 MessageBoxW를 요청할 때악센트가있는 스페인어 문자가 이상한 기호로 표시됩니다.

#include <windows.h> 
#include <string> 

using STR_VECTOR = std::vector<std::wstring>; 
... 
class MyClass{ 
... 
private: std::shared_ptr<STR_VECTOR> quote; 
private: std::wstring wstr; 
.. 
public: MyClass(); 
}; 
CPP file 
~~~~~~ 
MyClass::MyClass(){ 
    quote.reset(new VECTORSTR); 
    //... bla bla bla 
quote->push_back(L"Yes, Thus is the wolf"); 
quote->push_back(L"Sí, así es el lobo"); 
    //... bla bla bla 
uint64_t vec_size = quote->size(); 
    std::srand ((uint64_t)std::time(0)); 
    quote_num = rand() % (vec_size); 
    wstr = quote->at(quote_num); 
    MessageBoxEX(NULL, wstr.c_str(), TEXT("SomeText"), MB_OK | MB_ICONINFORMATION,0); 
    app.Write(); 
} 
+1

원본을 삭제 했으므로이 질문을 다시 열었습니다. 그러나 원본에 도움이되는 주석이 없어 졌으므로 원본을 실제로 편집해야합니다. 장래에 항상 원래 질문을 업데이트하고 중복 된 것을 게시하지 마십시오. 또한 사이트의 작동과 관련된 모든 문제는 귀하의 질문이 아닌 메타에 있습니다. –

+2

MessageBoxEx를 MessageBoxW로 바꾸고 다시 시도하십시오. –

+2

당신은'L '''문자열이있는'TEXT' 매크로를 사용하고 있습니다. 일치하지 않는 문자열이 있습니다. 와이드 캐릭터를 표준화하고'TCHAR' 매크로를 피하는 것이 좋습니다. – Dai

답변

1

문자 í가 MessageBoxW

그 편지의 텍스트 영역에 표시되어 나타납니다. 문제는 소스 코드 파일에 있습니다. 그것은 utf-8 인코딩으로 저장되었지만 컴파일러는 그것에 대해 알지 못합니다. 귀하의 컴퓨터의 기본 코드 페이지로 저장했다고 가정했습니다. 일반적으로 스페인어를 말할 때 1252입니다.

파일을 다시 열고 임의로 변경 한 다음 파일 + 다른 이름으로 저장을 클릭하십시오. 저장 버튼에서 화살표를 클릭하고 "인코딩으로 저장"을 선택하십시오. "유니 코드 (서명이있는 UTF8 - 코드 페이지 65001)"를 선택하십시오. 파일에는 BOM이 있으므로 컴파일러 에 utf-8로 인코딩 된 텍스트가 있다는 것을 알고 있습니다.

기본값입니다.이 파일이 BOM없이 어떻게 종료되었는지는 명확하지 않습니다. 다른 텍스트 편집기를 사용하는 경우 조심하십시오. 다시 구성하거나 폐기해야합니다.

+0

예, 감사합니다. 이제 작동합니다! – Jamiil

관련 문제