2008-10-27 10 views
6

클립 보드에서 HTML을 검색하면 인코딩이 잘못되어 이상한 문자가 삽입된다는 사실을 알고있는 사람이 있습니까? 같은 물건에올바르게 인코딩 된 HTML을 클립 보드에서 가져 오는 방법은 무엇입니까?

string s = (string) Clipboard.GetData(DataFormats.Html) 

결과이 같은 명령을 실행 예를 들어

,

<FONT size=-2>  <A href="/advanced_search?hl=en">Advanced 
Search</A><BR>  <A href="/preferences?hl=en">Preferences</A><BR>  <A 
href="/language_tools?hl=en">Language 
Tools</A></FONT> 

하지 인하가이 문제를 처리 할 방법을 잘하지만, 그 결과 마크 업에 이상한 문자가 있습니다 위.

버그가 .NET 프레임 워크와 함께있는 것으로 보입니다. 클립 보드에서 올바르게 인코딩 된 HTML을 얻는 가장 좋은 방법은 무엇이라고 생각하십니까?

답변

0

원본 원본 문서가 무엇인지 모르겠지만 Word와 Outlook은 서로 다른 인코딩으로 여러 버전의 클립 보드를 제공합니다. 하나는 보통 Windows-1252이고 다른 하나는 UTF-8입니다. 아마 당신은 Windows-1252 (Latin-1 + Smart Quotes)가 필요할 때 UTF-8로 인코딩 된 버전을 기본적으로 사용하고있을 것입니다. 비 ASCII 문자는 여러 개의 라틴 -1 악센트 부호가있는 문자로 표시됩니다. 대부분의 "Smart Quotes"는 Latin-1 세트에 없으며 종종 UTF-8에서 3 바이트입니다.

클립 보드 내용을 원하는 인코딩을 지정할 수 있습니까?

3

이 경우에는 내 사례처럼 보이지 않습니다. 오늘 클립 보드에서 데이터를 복사하려고했지만 몇 가지 유니 코드 문자가있었습니다. 내가 얻은 데이터는 Windows-1250 인코딩의 UTF-8 인코딩 파일 (내 Windows의 로컬 인코딩)을 읽는 것과 같습니다.

같은 경우가 있습니다. 당신이 HTML 데이터 를 저장하면 윈도우 1252 (다음은 문자가 아닌 표준 공간 후 비 부서지기 쉬운 공간 = 0xa0을 넣어 기억) (또는 Windows-1250, 두 작품)을. 그런 다음 UTF-8 파일로이 파일을 열고 당신이 있어야 무엇을 볼 수 있습니다.

다른 프로젝트에서는 손상된 인코딩으로 데이터를 수정하는 기능을 만들었습니다.

이때

에게 간단한 변환이 충분해야

byte[] data = Encoding.Default.GetBytes(text); 
text = Encoding.UTF8.GetString(data); 

내 본래의 기능을 좀 더 복잡한 데이터가 손상되지 않도록 검사를 포함 ...

public static bool FixMisencodedUTF8(ref string text, Encoding encoding) 
{ 
    if (string.IsNullOrEmpty(text)) 
    return false; 
    byte[] data = encoding.GetBytes(text); 
    // there should not be any character outside source encoding 
    string newStr = encoding.GetString(data); 
    if (!string.Equals(text, newStr)) // if there is any character "outside" 
    return false; // leave, the input is in a different encoding 
    if (IsValidUtf8(data) == 0) // test data to be valid UTF-8 byte sequence 
    return false; // if not, can not convert to UTF-8 
    text = Encoding.UTF8.GetString(data); 
    return true; 
} 

I 이 최고의 (또는 올바른 솔루션)하지하지만 난 어떻게 입력을 해결하는 다른 방법을 발견하지 않았다는 것을 알고 ...

편집은 Microsoft가 이미 오류를 발견처럼 (2017 년 7 월 20)

보인다 지금은 제대로 작동합니다. 문제가 일부 프레임 워크에 있는지 여부는 확실하지 않지만, 이제는 애플리케이션이 시간이 갈 때와 다른 프레임 워크를 사용한다는 것을 알았습니다. 대답을 썼습니다. 는 (지금은 4.5이며, 이전 버전은 2.0이었다)

(. 이제 내 모든 코드가 데이터를 구문 분석에 실패 수정 이미 aplied와 수정없이 응용 프로그램의 올바른 동작을 결정하는 또 다른 문제가 있습니다.)
0

System.Windows.Forms.Clipboard.GetText 시도 (System.Windows.Forms를 TextDataFormat .HTML을.);

0

DataFormats.Htmlspecification은 UTF-8로 인코딩됨을 나타냅니다. 하지만 .NET 4 Framework 이하에는 버그가 있으며 실제로는 UTF-8로 Windows-1252으로 읽습니다.

당신은 재미/나쁜 문자를 선도하는 잘못 인코딩의 충당을 얻을 같은 'A', ','A ','€ ¹ â ''Ž ','Å¡ ','A '', '같은 ž ','Ÿ ',' ',' ',' ¢ ',' £ ','¤ ',' ¥ ','Â| ','§§ ','¨ ' ' ©'여기

전체 설명 Debugging Chart Mapping Windows-1252 Characters to UTF-8 Bytes to Latin-1 Characters

SOLN : 번역 사전을 만들고 검색 및 대체합니다.

관련 문제