2012-08-15 2 views
1

콘솔과 디버그간에 출력이 다른 이유는 무엇입니까?Debug.WriteLine 및 그 문자 인코딩

byte [] data = new byte [] {0xB1, 0x00,0xA6,0x7C, 0x4e, 0xEC, 0xE7, 0xFF, 0xDD, 0xCE}; 

Console.WriteLine (new String(Encoding.GetEncoding("ISO-8859-1").GetChars(data))); 
Console.WriteLine (Encoding.UTF8.GetString(data)); 

Debug.WriteLine (new String(Encoding.GetEncoding("ISO-8859-1").GetChars(data))); 
Debug.WriteLine (new String(Encoding.UTF8.GetChars(data))); 

"Console.WriteLine"(라틴 인코딩) 출력 -> ± | | NìçÿÝÎ

"Console.WriteLine"(UTF8) 출력 -> | N

"Debug.WriteLine"은 출력을 표시하지 않습니다.

+0

왜 인코딩이 다른지 또는 왜 보이는 출력이 다른지 묻는 중입니까? –

답변

0

배열의 두 번째 위치에 0x00이 있는데, 아시다시피 문자열 끝입니다. Debug.WriteLine은 ASCII 인코딩으로 출력됩니다. 따라서 출력 창에서 첫 번째 바이트 만 출력합니다.

0x000x01으로 변경하면 전체 출력이 표시됩니다. 내가 조사 식 창에 new String(Encoding.GetEncoding("ISO-8859-1").GetChars(data)) 볼 때

나는 예외가 발생되는 것을 볼 : 존재하지 않는 배열 요소에 액세스 할 때이 일반적으로 발생

'new String(Encoding.GetEncoding("ISO-8859-1").GetChars(data))' threw an exception of type 'System.ArgumentException' string {System.ArgumentException}

합니다.

+0

이것은 대답이 아닌 주석으로 게시되어야합니다. –

+0

@DanPuzey, 게시물을 업데이트했습니다. – Vlad

+0

내 문제는 내 배열의 0x00 것으로 밝혀졌습니다. 나는 처음부터 그것을 잡았어야했는데, 나중에 3 시간이 아니었다. 잘못된 방향으로 나를 보낸 이유는 어떤 이유로 VS 출력 창과 콘솔 창에 다른 결과가 표시된다는 것입니다. – user1599720

0

호환성 이유 때문에 기본적으로 ASCII 인 OutputDebugString이 호출되기 때문에. 내 머리 꼭대기에서 해결 방법을 모르지만 한 가지를 찾아 보겠습니다.

EDIT 사실

, 나는 당신의 문제를 재현 할 수 없습니다. |

NìçÿÝÎ

□ | | N

± □ | |

NìçÿÝÎ

□ | □

± : 내 컴퓨터에서 나는이 출력을 얻을 N

1

이것은 대부분 가비지 쓰레기입니다.

문자는 Unicode replacement character, 코드 U + FFFD입니다. 바이트 값에 적절한 utf-8 인코딩 값이 없기 때문에 많은 정보를 얻을 수 있습니다.

Debug.Print() 문 에서 적어도 내 컴퓨터에서는 출력을 생성합니다. 출력 창을보십시오. 디버그 출력의 기본 리스너는 Windows OutputDebugString() API 함수를 호출하는 함수이기 때문에 문자열의 첫 번째 문자 만 표시됩니다. 디버거에 출력을 보냅니다. 이것은 C 언어 기반의 API 함수이며, 0은 문자열 종결 자이므로 단일 문자 만 출력합니다.

무엇을하려고하든간에 바이트 값이 이 아니고이 텍스트를 나타냄을 분명히 알 수 있습니다. 이진 데이터가 무엇인지 추측 할 수있는 패턴이 보이지 않습니다.