2014-02-12 2 views
0

카페인 IV가 너무 낮아서 내 마음이 흐려지고 간단한 인코딩 문제라고 생각하는 솔루션을 찾는 데 문제가 있습니다 (경험이 거의 없습니다.) 와).잘못된 인코딩으로 인해 DB 쿼리에 문제가 발생했습니다.

EF6 코드를 사용하는 DB가 있습니다. 코드 블럭 내에 포함 된 웹 사이트 포럼의 일부 텍스트를 복사 할 때까지 모든 것이 잘 작동하는 것 같습니다. 난 헤더를 확인하고 아마 UTF - 8로 인코딩 된거야.

본질적으로이 텍스트를 가져 와서 문자열 배열로 분할하고 각 줄의 문자열과 일치하는 레코드를 DB에서 확인하십시오. 내가 SQLMS에 가서 LIKE '% Magnetic %'와 같은 테이블을 질의했을 때, 내 DB 테이블의 어떤 것과도 일치하지 않는 "Magnition"문자열로 문제가 발생할 때까지 모든 것이 잘 진행되고있었습니다. 결과가 있습니다.

은 내가 DB 쿼리의 텍스트와 ++ 메모장에 웹 사이트에서 텍스트를 삭제하고 동일 보이는 것을보고 그런 다음

Magnеtic 
Magnеtic 

, 나는 ANSI로 인코딩을 변경하고 그것을 보여 주었다 :

Magnetic <--From DB 
Magnеtic <--From website 

작은 전구가 머리 위로 들어 왔지만이 문제를 해결하려는 시도가 실패했습니다.

나는 다양한 방법을 사용하여 시도했지만 나는 그것이 잘못된 도구를 사용하여 문제를 공격하는 내 튀김 뇌 생각 :

string.compare(a, b) == 0 
string.equals(a, b) 
string.ToUpperInvariant() 

내가 기억할 수없는 아마 몇 사람을.

이제 내 문제는 무엇인지 알 수 있습니다.이 문제는 해결할 수있는 간단한 문제라고 생각하지만, 내가 말했듯이, 나는 튀김에 시달리고 일부 지역 사회의 도움이 필요합니다.

저는 전문 코더가 아니기 때문에 아마추어가 아니므로 모범 사례 나 고급 기술을 사용하지 않을 수도 있습니다.

편집 : 오늘 나는 좀 더 검색을하고 작동하지 않는 몇 가지 방법을 발견했습니다.

private string RemoveAccent(string txt) 
{ 
    byte[] bytes = Encoding.GetEncoding("Cyrillic").GetBytes(txt); 
    return Encoding.ASCII.GetString(bytes); 
} 

이 문자는 키릴 문자 인코딩의 악센트 부호가있는 문자를 제거하는 것으로 보입니다. 결과는 예상대로 아니었지만 효과가있었습니다. 결과 : 나는 또한 시도

Magn?tic <- Computer interpretation 
Magnetic <- Visual representation 

는 :

private string RemoveAccent2(string txt) 
{ 
    char[] toReplace = "àèìòùÀÈÌÒÙ äëïöüÄËÏÖÜ âêîôûÂÊÎÔÛ áéíóúÁÉÍÓÚðÐýÝ ãñõÃÑÕšŠžŽçÇåÅøØ".ToCharArray(); 
    char[] replaceChars = "aeiouAEIOU aeiouAEIOU aeiouAEIOU aeiouAEIOUdDyY anoANOsSzZcCaAoO".ToCharArray(); 
    for (int i = 0; i < toReplace.Count(); i++) 
    { 
     txt = txt.Replace(toReplace[i], replaceChars[i]); 
    } 
    return txt; 
} 

이 방법은 모든 변경 사항을 제공하지 않았다.

답변

0

이러한 경우 문자를 Google에 복사하여 붙여 넣기하면 도움이 될 수 있습니다. 이 경우 결과는 the Wikipedia article about the letter Ye in Cyrillic을 가리키며 라틴 알파벳에서 E와 정확히 같지만 유니 코드에서 다른 인코딩을 사용합니다.

결과는 "Magnition"문자열이 "Magnetic"(적어도 공통 글꼴 사용)과 똑같아 보이지만 실제로는 다른 문자열입니다.

+0

회신 해 주셔서 감사합니다. @svick.따라서 두 개의 시각적으로 동일한 문자열을 얻는다면 컴퓨터가 서로 다른 것으로 해석합니다. 컴퓨터에서 해석하는 것보다 _ 시각적으로 보이는 것을 비교할 수 있도록 모든 텍스트를 표준화 할 수 있습니까? – Josh

+0

@Josh 나는 다른 글꼴이 다르게 행동 할 수 있기 때문에 그렇게 생각하지 않는다. – svick

관련 문제