문제

문제는 다음과 같습니다.

C#에서는 레거시 액세스 데이터베이스에서 정보를 얻고 있습니다. .NET는 컨텐츠를 나에게 전달하기 전에 데이터베이스의 내용 (이 문제의 경우 문자열의 경우)을 유니 코드로 변환합니다.

이 유니 코드 문자열을 ASCII 동등한 것으로 다시 변환하려면 어떻게합니까?


편집하다
Unicode Char 710은 실제로 수정 자 문자 Circumflex Accent입니다. 문제는 조금 더 정확합니다.

 -> (Extended) ASCII character ê (Extended ASCII 136) was inserted in the database.
 -> Either Access or the reading component in .NET converted this to U+02C6 U+0065
    (MODIFIER LETTER CIRCUMFLEX ACCENT + LATIN SMALL LETTER E)
 -> I need the (Extended) ASCII character 136 back.


내가 시도한 내용은 다음과 같습니다 (지금은 이것이 작동하지 않는 이유를 봅니다 ...) :

string myInput = Convert.ToString(Convert.ToChar(710));
byte[] asBytes = Encoding.ASCII.GetBytes(myInput);

그러나 이것은 94가 아니라 값 63의 바이트가 발생합니다.
다음은 새로운 시도가 있지만 여전히 작동하지 않습니다.

byte[] bytes = Encoding.ASCII.GetBytes("ê");


솔직
둘 다 감사합니다 CSGERO 그리고 BZLM 올바른 방향을 가리키기 위해 문제를 해결했습니다. 여기.

도움이 되었습니까?

해결책

좋아, 정교 해 보자. 둘 다 CSGERO 그리고 BZLM 올바른 방향을 가리 킵니다.

BLZM의 답변으로 인해 Wiki의 Windows-1252 페이지를 찾아 코드 페지라고합니다. 위키 백과 기사 코드 페이지 다음을 언급했습니다.

이것에 대한 공식적인 표준은 존재하지 않았다 '확장 된 문자 세트';; IBM은 EBCDIC 인코딩의 변형에 대해 항상 수행 한 것처럼 변형을 코드 페이지라고 불렀습니다.

이로 인해 CodePage 437이 이어졌습니다.

n ASCII 호환 코드 페이지에서 128 자 낮은 문자는 표준 US-ASCII 값을 유지하고 다른 페이지 (또는 문자 세트)를 위 128 자에서 사용할 수 있습니다. 예를 들어 북미 시장을 위해 건축 된 DOS 컴퓨터는 사용됩니다. 코드 437 페이지, 프랑스어, 독일어 및 기타 유럽 언어에 필요한 악센트가있는 캐릭터와 일부 그래픽 라인 드로잉 문자가 포함되었습니다.

그래서 CodePage 437은 내가 'Extended ASCII'라고 부르는 CodePage였으며, 문자 136이기 때문에 다른 숯을 찾아서 옳게 보입니다.

csgero는 encoding.getencoding () 힌트와 함께 제공되었습니다.이 문제를 해결하는 데 사용하여 내 문제를 해결했습니다.

byte[] bytes = Encoding.GetEncoding(437).GetBytes("ê");

다른 팁

여기서 기본 ASCII 인코딩 (encoding.ascii)을 사용할 수는 없지만 Encoding.getencoding (...)을 사용하여 적절한 코드 페이지로 인코딩을 작성해야합니다. ISO 8859-1의 슈퍼 세트 인 Code Page 1252를 사용하려고 할 수 있습니다.

ASCII는 ê를 정의하지 않습니다. 숫자 136은 Windows-1252와 같은 8 비트 인코딩에서 Circulflex의 숫자에서 비롯됩니다.

이 경우 Access 데이터베이스에 저장되어야 할 작은 E가 실제로 있는지 확인할 수 있습니까? 아마도 u+02c6 u+0065는 변환 오류의 결과입니다. 입력은 실제로 E입니다. 그 뒤에 우울 플렉스 또는 전적으로 다른 것. 아마도 액세스 데이터베이스에는 지정된 인코딩이 내용과 일치하지 않는다는 점에서 손상된 데이터가있을 수 있습니다.이 경우 .NET 클라이언트가 데이터를 잘못 구문 분석 할 수 있습니다 (잘못된 디코더 사용).

데이터베이스를 읽는 동안이 오류가 실제로 도입되면 일부 코드 또는 구성 설정이 도움이 될 수 있습니다.

~ 안에 코드 437 페이지, 문자 번호 136은 e eciledflex가있는 e입니다.

흠… 당신이 어떤 캐릭터를 의미하는지 잘 모르겠습니다. 간병 ( "^", wilcflex Accent)은 ASCII 및 유니 코드 (u+005E)에서 동일한 코드를 갖습니다.

/편집 : 젠장, 내 잘못. 710 (u+02c6)은 실제로 수정 자 문자 Circumflex Accent입니다. 불행히도,이 캐릭터는 ASCII의 일부가 아닙니다. 정상적인 복수처럼 보일지 모르지만 다른 캐릭터입니다. 간단한 변환은 여기서 도움이되지 않습니다. .NET가 유니 코드에서 변환 할 때 .NET가 유사한 문자의 매핑을 지원하는지 확실하지 않습니다. 그러나 조사 할 가치가 있습니다.

값 63은 물음표, 즉 "ASCII 에이 문자를 표시 할 수 없습니다"라고 물음입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top