2013-01-23 2 views
1
으로 변환

데이터베이스에서 데이터를 가져와 .csv 파일로 출력하는 C# 응용 프로그램을 작성하도록 요청한 클라이언트가 있습니다. 여태까지는 그런대로 잘됐다.유니 코드 문자를 C#

이 데이터베이스에는 유니 코드 문자가 포함되어 있으며 클라이언트가 Excel에서 .csv 파일을 열면 "이상한"문자가 표시됩니다. 예 : 클라이언트가 Dash처럼 보일 것으로 생각하면 x0096은 유로 통화 기호 옆에 당근이있는 A 모양입니다.

그래서 나는 그 캐릭터들을 "이상하지 않다"고 요구하도록 요청 받았다.

필자는 각 이상한 문자에 대해 코드를 작성했습니다 (아래 12 행을 가지고 있습니다).

input = input.Replace((char)weirdCharacter, (char)normalCharacter); 

더 나은 방법이 있어야합니다.

+1

그래서 데이터베이스와 CSV 파일은 어떤 인코딩을 사용합니까? –

+0

첫 번째 생각은 이상하고 정상적인 문자 배열을 만들고 루프를 반복하는 것입니다 (당 하나의 줄이 아니라 ...). 그러나 그것은 아직도 약간 kluge-ey이다. – Floris

+3

[모든 소프트웨어 개발자가 절대적으로 최소로 절대적으로, 절대적으로 유니 코드와 문자 집합에 대해 알고 있어야합니다 (변명 없음)] (http://www.joelonsoftware.com/articles/Unicode.html) – mellamokb

답변

1

HTML 파일을 생성 할 때 동일한 문제가있었습니다. 나를위한 솔루션은 내 출력 파일의 인코딩을 변경하는 것이 었습니다.

StreamWriter swHTMLPage = 
       new System.IO.StreamWriter(OutputFileName, false, Encoding.UTF8); 

Encoding.UTF8 매개 변수를 추가하면 문자가 올바르게 표시되기 시작했습니다. Excel과 관련 되었기 때문에 이것이 솔루션에 적용될 수 있는지는 모르겠지만 그렇게 할 수는 있습니다.

+0

데이터베이스가 UTF-8을 사용한다고 가정하면 트릭을 수행해야합니다. –

0

Vincent James가 말하듯이 인코딩 문제인 경우 값을 디코딩/인코딩 할 때 올바른 인코딩을 사용하는 것이 가장 이상적입니다. 그러나 여전히 작동하지 않는다면 ...

나는 이것이 매우 간단하다고 생각합니다. 당신은 어떻게 생각합니까? :

Dictionary<char, char> substitutions = new Dictionary<char, char> { 
    {'\0x0096', 'F'}, {'\0x0101', 'O'}, {'\0x0121', 'O'}, ... 
}; 

foreach(KeyValuePair<char, char> pair in substitutions) 
{ 
    input.Replace(pair.Key, pair.Value); 
} 
관련 문제