블로그 이미지
ssun++

카테고리

[전체] (73)
Android (7)
JavaScript (9)
CI (5)
Language (14)
ETC (38)
Total322,318
Today10
Yesterday16

'ICU'에 해당되는 글 3건

  1. 2011.09.17 WebKit 텍스트 컨버팅 3
  2. 2011.09.16 WebKit 텍스트 컨버팅 2
  3. 2011.09.14 WebKit 텍스트 컨버팅
[시작]
웹킷 내부에서 지원(Latin1, UTF8, UTF16)하지 않는 인코딩에 대해서
ICU에서 컨버터를 가져와서 디코드하는 과정입니다.

[ICU를 사용한 디코드]
ICU를 사용하여 텍스트를 유니코드로 변환합니다.


[끝]
컨버팅 과정 끝입니다.
Posted by ssun++

댓글을 달아 주세요

[시작]
웹킷 내부 지원(Latin1, UTF8, UTF16)하지 않는 인코딩에 대해서
ICU 데이터를 가져와서 map에 저장하는 과정입니다.

[Map의 확장]
처음에는 웹킷 내부 지원 인코딩에 대한 정보만을 map에 저장합니다.
원하는 인코딩 정보를 찾지못하는 경우 ICU 데이터를 매핑하여 map을 확장합니다.
 

확장한 map에서 인코딩 정보를 찾으면 ICU에서 컨버터를 가져와서 사용하고,
확장 후에도 인코딩 정보를 찾지 못하면 디폴트 인코딩으로 디코드합니다.

[끝]
ICU 소스 내부로 들어가지 않는 선에서는 map 확장도 복잡할게 없네요.
다음은 TextCodecICU가 ICU에서 컨버터 데이터 가져오는 과정을 보겠습니다. 
Posted by ssun++

댓글을 달아 주세요

[시작]
주로 텍스트 디코딩 시에 사용되는 과정입니다.
오픈소스인 ICU를 사용합니다.


[기본]
ICU의 개념을 보면, 컨버팅하는 'converter'가 있고 컨버터는 복수의 'alias'를 가집니다.
아래 그림은 'windows-949-2000' 컨버터에 대한 예입니다.
 

'alias'로 인코딩된 텍스트를 디코딩하는 경우 해당하는 'converter'의 이름을 찾고,
icudt40l.dll이나 icudt40l.dat파일에서 컨버터 데이터를 읽어옵니다. (숫자는 버전에 따라)

기본적인 인코딩(Latin1, UTF8, UTF16)은 웹킷 자체에서 처리하기 때문에,
관리하는 방식은 유사하게 가져가지만 ICU 데이터를 사용하지는 않습니다.


[컨버전 데이터 관리]
웹킷에서는 위의 개념을 적용하기 위해서 2개의 맵을 가지고 있습니다.
하나는 alias와 converter name을 맵핑,
나머지는 converter name과 TextCodecFactory를 맵핑합니다.

alias에 해당하는 TextCodec을 위와같이 찾을 수 있고,
생성된 TextCodec이 TextCodecICU인 경우에는 converter 데이터를 ICU에서 가져옵니다.


[예외 처리]
처음에는 웹킷에서 처리할 수 있는 데이터만 map에 올려놓습니다.

최초 데이터에서 alias에 알맞은 name을 찾지 못하는 경우 ICU의 데이터를 등록하여 찾습니다.

최종적으로 못찾는 경우에는 디폴트 인코딩(Preference)으로 처리하며, 렌더링이 깨질 수 있습니다.


[끝]
대략적인 텍스트 컨버전 과정을 살펴보았습니다.
다음에는 ICU 데이터를 사용하는 과정에 대해서 좀 더 살펴볼 수 있을 것 같습니다. 

ps. 그림에서 textEncodingMap이 아니고 textEncodingNameMap이네요. 
Posted by ssun++

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함