2017-05-17 2 views
1

Windows XP/7/10을 대상으로하는 Lazarus (1.5) fpc (3.1.1)로 응용 프로그램을 작성하고 있습니다. 내 응용 프로그램은 사용자가 선택한 경로의 파일 시스템에서 파일을 읽고 씁니다. 경로 또는 파일 이름 (예를 들어 à è é 같은) 특수 문자를 포함 할 경우Lazarus ListBox SaveToFile 특수 문자가있는 파일 이름

C :

'EFCreateError'없음에 : \ 사용자 \ DeAndrè \

응용 프로그램 out.txt 예외를 제기 "C : \ Users \ DeAndrè \ out.txt"파일을 작성하십시오. A 형 TListBox (에 ListBox1)로 드래그 두 TButton으로 (Button1을하고 Button2를) 및 TSaveDialog (SaveDialog1)

는 sigle 양식 간단한 애플리케이션을 작성하는 방법이 문제를 재생할 수있다. 일부

procedure TForm1.Button2Click(Sender: TObject); 
begin 
    if SaveDialog1.Execute then 
    begin 
    ListBox1.Items.SaveToFile(SaveDialog1.FileName); 
    end; 
end; 

응용 프로그램을 실행하고 "Button1을"클릭

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    // Simple Add Hello to ListBox 
    ListBox1.Items.Add('Hello '+IntToStr(ListBox1.Items.Count)); 
end; 

Button2를의 OnClick 이벤트에서 : Button1을의 OnClick 이벤트에

은 (에 ListBox1에 일부 데이터를 작성하는 경우에만 사용) (목록에 단어를 추가하기 위해) Button2를 클릭하고 특수 문자가 포함 된 경로에 내용을 저장하려고 시도하면 ...

FileNa를 변환하면 내가 작동 UTF8ToAnsi와 함께,하지만 왜 작동합니까? Windows FileSystem은 UTF8이 아닙니까?

"표준"해결책이 있습니까? 예를 들어 올바른 모드 또는 이와 유사한 방식으로 파일 시스템을 사용하도록 응용 프로그램을 설정합니까? "프로젝트"에

: 당신은 "사용자 지정 옵션"에 -dEnableUTF8RTL를 추가해야합니다 UnicodeAPI를 사용하는 나사로를 사용하려면 :

내가 해결책을 발견 루디 다윗의 방향 후에 당신에게

+0

@RudyVelthuis은 [링크] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd317748 (V = 대에 따라, 내 Windows 설치는 NTFS 파일 시스템을 사용하여 주셔서 감사합니다. 85) .aspx)는 유니 코드 – AndreaBoc

+0

유니 코드 API를 호출하는 lazarus 코드 –

+0

@David 델파이 (XE8)의 동일한 샘플 코드가 오류없이 작동합니다 ... – AndreaBoc

답변

0

감사 -> "프로젝트 옵션"-> "추가"에

클릭 "을 추가하고 무시"-> "사용자 지정 옵션"을 추가

-dEnableUTF8RTL 

이 강제 컴파일러는 FileSystem Access에 유니 코드를 사용합니다.

"RTL에서 UTF8 설정"버튼을 클릭 할 수도 있습니다.

보통 : 나사로 UTF8에 대해 "위키"페이지에서 추출이 http://forum.lazarus.freepascal.org/index.php?topic=27240.0 있다 : 나사로 포럼의 링크에서

-FcUTF8 

: -dEnableUTF8RTL에 추가 이 버튼은 옵션을 추가 RTL은 문자열 (예 : FileExists 및 TStringList.LoadFromFile)에 시스템 코드 페이지를 사용합니다. Windows에서는 유니 코드가 아닌 인코딩이므로 언어 ​​그룹의 문자 만 사용할 수 있습니다. LCL은 전체 유니 코드 범위 인 UTF-8 인코딩과 호환됩니다.On Linux 및 Mac OS X UTF-8은 일반적으로 시스템 코드 페이지이므로 RTL 은 기본적으로 여기 CP_UTF8을 사용합니다.

FPC 2.7.1부터 RTL의 기본 시스템 코드 페이지는 에서 UTF-8 (CP_UTF8)으로 변경할 수 있습니다. 따라서 Windows 사용자는 RTL에서 UTF-8 문자열을 사용할 수 있습니다.

관련 문제