2014-12-15 2 views
3

저는 Delphi 7을 사용하고 있으며 일련의 레코드가 포함 된 csv 파일을 가져 와서 가져 오는 루틴을 가지고 있습니다. 이 작업은 MyStringList.LoadFromFile (csvfile)을 사용하여 TStringList에로드 한 다음 line = MyStringList [i]로 각 행을 가져 와서 수행합니다.TStringList의 특수 문자 변환

항상 정상적으로 작동했지만 특수 문자를 제대로 가져 오지 못했습니다. 예를 들어 Rue François Coppée는 Rue François Coppée로 나오는데, 악센트 부호가있는 프랑스어 문자가 문제입니다.

이 문제를 해결하는 간단한 방법이 있습니까?

답변

1

아마 UTF8 인코딩이 아닙니다. 변환하려고 :

Text := UTF8Encode(Text); 

감사합니다,

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 시험해 보았다. 그리고 실제로 그것이 Rue François Coppà © e로 끝났습니다. 나는 UTF8이 처음 엔 엔코딩 된 것이 틀림 없어, 무슨 일이 일어나고 있는지 혼란 스럽다. – user3173083

+1

메모장에서 파일을 엽니 다. ++, 메뉴 형식을 확인하면 실제 인코딩이 무엇인지 보여줍니다. –

+2

텍스트는 UTF-8로 인코딩됩니다. 다시 인코딩하는 것은 항상 잘못입니다. 'UTF8Decode'가 필요합니다. –

4

파일이 UTF-8로 인코딩됩니다. 예를 들어, ç을 고려하십시오. 링크에서 볼 수 있듯이 UTF-8로 0xC3 0xA7으로 인코딩되어 있습니다. 그리고 Windows-1252에서 0xC30xA7을 인코딩하고 §을 인코딩합니다.

ANSI Delphi를 사용하여 쉽게 처리 할 수 ​​있는지 여부는 프로그램을 실행하는 일반적인 코드 페이지에 따라 다릅니다.

  • Windows 1252를 사용 중이라면 괜찮습니다. UTF8Decode을 호출하면 UTF-8로 인코딩 된 텍스트를 디코딩하면됩니다.
  • 다른 로케일을 사용하는 경우 인생은 점점 어려워집니다. 이러한 문자는 로캘의 문자 집합에 포함되어 있지 않을 수 있으며이 경우 널리 사용되는 ANSI charset을 사용하여 인코딩 된 Delphi string 변수에서 해당 문자를 나타낼 수 없습니다. 이 경우 유니 코드를 사용해야합니다. 당신이 국제 텍스트를 처리하는 것에주의 경우

는 당신이 필요로 하나 : 현대 유니 코드 지원이 델파이, 또는

  • 델파이 7 스틱 및 WideString을 사용하고 TNT 유니 코드로

    • 업그레이드 구성 요소.
  • +0

    감사합니다. 예, UTF8Encode가 아니라 UTF8Decode가 작동합니다. – user3173083

    +0

    도움이 더 필요하십니까? –