티스토리 뷰
Programming/Delphi
Delphi - TClientDataset -> FastReport : Unicode 데이터 처리
파란크리스마스 2012. 2. 16. 14:44728x90
TClientDataset 데이터를 XML로 가지고 왔지만,
일본어에 표현에 문제가 발견 되었다.
모든 문자열 데이터의 경우 fieldtype="string"로 사용했는데,
유니코드의 경우 fieldtype="string.uni" 라고
표현해야 TWideStringField로 인식하여 올바르게 데이터가 표현되지만,
영문만 있는경우 또 다시 문제가 발견되었다.
영문만 존재하는 경우 데이터를 모두 확인하여 fieldtype="string"로 했지만,
이것도 임시 방편일뿐 완벽한 처리는 되는 않는다.
TClientDataset 자체의 버그라고 생각되지만, 우선은 이렇게 처리 해두었다.
------------------------------------------------------------------------
FastReport 에도 다국어를 위해서 처리 해야 하는 문제가 발견되었다.
TfrxMemoView 속성에서 UseDefaultCharset 값을 True로 해야 일본어가 올바르게 표시 되었다.
관련 소스 위치
procedure TfrxCustomMemoView.GetData;
var
i, j: Integer;
s, s1, s2, dc1, dc2: WideString;
ThLocale: Cardinal;
LocCharset: Boolean;
begin
inherited;
ThLocale := 0;
LocCharset := ((Font.Charset <> DEFAULT_CHARSET) and not FUseDefaultCharset);
if IsDataField then
begin
if DataSet.IsBlobField(DataField) then
begin
if LocCharset then
begin
ThLocale := GetThreadLocale;
SetThreadLocale(GetLocalByCharSet(Font.Charset));
end;
DataSet.AssignBlobTo(DataField, FMemo);
if LocCharset then
SetThreadLocale(ThLocale);
end
else
begin
FValue := DataSet.Value[DataField];
if FDisplayFormat.Kind = fkText then
begin
if LocCharset then
FMemo.Text := AnsiToUnicode(AnsiString(DataSet.DisplayText[DataField]), Font.Charset)
else
FMemo.Text := DataSet.DisplayText[DataField];
end
else FMemo.Text := FormatData(FValue);
if FHideZeros and (TVarData(FValue).VType <> varString) and
{$IFDEF Delphi12}(TVarData(FValue).VType <> varUString) and{$ENDIF}
(TVarData(FValue).VType <> varOleStr) and (FValue = 0) then
FMemo.Text := '';
end;
end
일본어에 표현에 문제가 발견 되었다.
모든 문자열 데이터의 경우 fieldtype="string"로 사용했는데,
유니코드의 경우 fieldtype="string.uni" 라고
표현해야 TWideStringField로 인식하여 올바르게 데이터가 표현되지만,
영문만 있는경우 또 다시 문제가 발견되었다.
영문만 존재하는 경우 데이터를 모두 확인하여 fieldtype="string"로 했지만,
이것도 임시 방편일뿐 완벽한 처리는 되는 않는다.
TClientDataset 자체의 버그라고 생각되지만, 우선은 이렇게 처리 해두었다.
------------------------------------------------------------------------
FastReport 에도 다국어를 위해서 처리 해야 하는 문제가 발견되었다.
TfrxMemoView 속성에서 UseDefaultCharset 값을 True로 해야 일본어가 올바르게 표시 되었다.
관련 소스 위치
procedure TfrxCustomMemoView.GetData;
var
i, j: Integer;
s, s1, s2, dc1, dc2: WideString;
ThLocale: Cardinal;
LocCharset: Boolean;
begin
inherited;
ThLocale := 0;
LocCharset := ((Font.Charset <> DEFAULT_CHARSET) and not FUseDefaultCharset);
if IsDataField then
begin
if DataSet.IsBlobField(DataField) then
begin
if LocCharset then
begin
ThLocale := GetThreadLocale;
SetThreadLocale(GetLocalByCharSet(Font.Charset));
end;
DataSet.AssignBlobTo(DataField, FMemo);
if LocCharset then
SetThreadLocale(ThLocale);
end
else
begin
FValue := DataSet.Value[DataField];
if FDisplayFormat.Kind = fkText then
begin
if LocCharset then
FMemo.Text := AnsiToUnicode(AnsiString(DataSet.DisplayText[DataField]), Font.Charset)
else
FMemo.Text := DataSet.DisplayText[DataField];
end
else FMemo.Text := FormatData(FValue);
if FHideZeros and (TVarData(FValue).VType <> varString) and
{$IFDEF Delphi12}(TVarData(FValue).VType <> varUString) and{$ENDIF}
(TVarData(FValue).VType <> varOleStr) and (FValue = 0) then
FMemo.Text := '';
end;
end
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- KOBA
- 서울오토살롱
- flex
- Spring MVC
- Mac
- NDK
- 튜닝쇼 2008
- 송주경
- Xcode
- MySQL
- SAS
- 레이싱모델 익스트림 포토 페스티벌
- 전예희
- JavaScript
- koba2010
- Delphi Tip
- ffmpeg
- sas2009
- Java
- 지스타2007
- oracle
- Spring
- BPI-M4
- Delphi
- ble
- Linux
- 일본여행
- android
- ubuntu
- 동경
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함