0x7F로 시작하고 길이가 4바이트인 멀티바이트 문자 집합은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/680495

  •  22-08-2019
  •  | 
  •  

문제

한자를 올바르게 표시하기 위해 일부 레거시 코드를 얻으려고 합니다.제가 작업하려고 하는 문자 인코딩 중 하나는 0x7F로 시작하고 길이가 4바이트입니다(0x7F 바이트 포함).이것이 어떤 종류의 인코딩인지, 그리고 이에 대한 정보를 어디서 찾을 수 있는지 아는 사람이 있나요?감사해요..

업데이트:또한 모든 문자가 0xE3으로 시작하고 길이가 3바이트인 일부 일본어 인코딩으로 작업해야 했습니다.Windows에서 일본어 로케일을 선택하면 내 컴퓨터에는 제대로 표시되지만, 우리 응용 프로그램에서는 제대로 표시되지 않습니다.그런데 일본어가 아닌 다른 로케일을 선택하면 파일명도 제대로 보이지 않습니다.그래서 이 인코딩은 유니코드가 아닌 것 같아요.그것이 무엇인지 아는 사람 있나요?ANSI인가요?시프트 JIS인가요?

중국어의 경우 유니코드와 UTF-8 문자로 테스트했는데 동일한 패턴이 나타납니다.0x7F 뒤에 3바이트가 옵니다.유니코드와 UTF-8은 같은가요?

도움이 되었습니까?

해결책

내가 작업하려는 한 문자 인코딩 0x7f로 시작하고 4 바이트 길이입니다.

다른 바이트는 무엇입니까? 이 인코딩에 라틴어 텍스트가 있습니까?

"0x7f 0x ... 0x00 0x00"인 경우 UTF-32LE를보고 있습니다. 또한 두 개의 UTF-16 (LE 또는 BE) 문자 일 수도 있습니다.

대부분의 동아시아 인코딩은 0x80-0xff를 ASCII가 아닌 문자의 리드 바이트로 사용합니다. 내가 아는 것은 ASCII 삭제 이외의 다른 방법으로 주요 0x7F를 사용할 것이라는 것을 아는 것은 없습니다.

ETA :

바이트 주문 마크가 있어야합니까?

인코딩이 'UTF-32LE'(아마도 당신에게 도달하기 전에 잃어버린 것)라는 신호 전달 방법이 있다면 BOM이 필요하지 않습니다.

또한 모든 캐릭터를 0xE3로 시작하고 길이가 3 바이트 인 일본인 인코딩과 함께 작업해야했습니다.

그것은 확실히 UTF-8입니다. 시퀀스 0xe3 0x ... 0x ... u+3000과 u+4000 사이의 문자가 발생합니다.

Windows에서 일본어 로케일을 선택하면 컴퓨터에 올바르게 표시되지만 응용 프로그램에는 제대로 표시되지 않습니다.

그런 다음 응용 프로그램이 유감스럽게도 비 유니 코드 호환 앱의 유감스러운 무리 중 하나이며 여전히 'w'-suffixed 앱 내부의'A '(*) 버전의'(*) 버전을 사용하고 있습니다. 실제 인코딩에 따라 문자열을 읽을 수 있는지 여부는 Moot입니다. 비너 지코 코드 호환 앱은 서부 지역에 동아시아 사원 사진을 표시 할 수 없습니다.

(*: "ANSI"의 이름을 딴 것은 "현재 시스템 코드가 설정된 시스템"에 대한 Windows의 오해의 소지가있는 용어입니다. 그래서 로케일 변경에 영향을 미쳤습니다.)

ETA (2) :

좋아, 금이 간다. 이전에 만난 표준화 된 인코딩은 아니지만 유니 코드 코드 포인트가 인코딩되고 있다는 전제를 가정하면 상대적으로 쉽게 해독하기가 쉽습니다.

0x00-0x7E: plain ASCII
0x7F A B C: Unicode character

유니 코드 탈출에서 인코딩 된 문자는 A, B 및 C의 주요 문자열로 인덱스를 가져 와서 함께 추가하여 계산할 수 있습니다.

A*0x1000 + B*0x40 + C

즉, Base-64 문자 세트이지만 일반적인 Base64 표준은 아닙니다. 약간의 실험은 다음의 주요 문자열을 제공합니다.

.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

'.' 그리고 '_'캐릭터는 당신이 게시 한 문자 중 어느 것도 그것들을 사용하지 않기 때문에 추측입니다. 정확한 문자열을 찾으려면 더 많은 데이터가 필요합니다.

예를 들면 다음과 같습니다.

0x7F 3 u g
A=4 B=58 C=44
4*0x1000 + 58*0x40 + 44 = 0x4EAC
U+4EAC = 京

ETA (3) :

예, 각 코드 포인트를 수동으로 빨고 문자로 결합하여 기본 유니 코드 문자열을 쉽게 만들 수 있어야합니다. 사용중인 플랫폼에서 무엇을 사용할 수 있는지 잘 모르겠지만, 유니 코드 캡슐화 가능한 플랫폼은 CodePoints에서 간단히 문자열을 만들 수 있어야합니다 (그리고 UTF-16LE 바이트로 수동으로 다시 인코딩 할 필요없이).

나는 세 예제 문자가 동일한 일반 범위에서 첫 번째 탈출 자와 유니 코드 코드 포인트와 동일한 수치 순서로 유니 코드 코드 포인트 여야한다고 생각했습니다. 다른 두 캐릭터는 무작위로 변하는 것처럼 보였으므로 코드 포인트의 빅 엔디 언 인코딩 일 가능성이 높았으며, 아마도 6만큼 Base-64 인코딩은 읽기 쉬운 ASCII에서 얻을 수있는만큼 많은 비트 일 것입니다.

Standard Base64 자체는 문자로 시작하여 기본 다국어 평면에서 너무 멀리 떨어진 곳으로 시작할 것입니다. 그래서 나는 '0123456789ABCDEFG ...'로 추측하기 시작했습니다. 그 결과 주어진 문자의 코드 포인트에 가까운 숫자가 발생했지만 너무 낮습니다. 열쇠 문자열의 시작 부분에 추가 문자를 삽입하면 (Digit '0'이 숫자 0에 맵핑되지 않음) 문자 중 하나가 오른쪽으로, 다른 두 개는 매우 가깝습니다. 옳은 사람은 소문자 문자가 없었으므로 하위 문자 만 변경하기 위해 상단과 하위 케이스 사이에 다른 문자를 삽입했습니다. 이것은 올바른 숫자를 생각해 냈습니다.

이것이 실제로 옳다는 것을 보장하지는 않지만 (삽입 된 문자의 임의 선택을 제외하고) 그럴 가능성이 매우 높습니다.

다른 팁

당신은보고 싶을 수도 있습니다 중국어 인코딩 Wikipedia의 페이지. 내가 볼 수있는 유일한 인코딩은 항상 4 바이트입니다. UTF-32.

GB 18030 현재의 표준 중국어는 세트이지만 길이는 1 ~ 4 바이트 일 수 있습니다.

노력하다 Chardet. 바이트 문자열을 인코딩하는 캐릭터를 추측하는 것이 좋습니다.

유니 코드와 UTF-8이 동일합니까?

UTF-8은 유니 코드 문자를 바이트 시퀀스로 표현하는 한 가지 방법 일뿐입니다. 유니 코드는 전체 표준이며, 각 문자에 숫자 및 사람이 읽을 수있는 식별자와 문자에 대한 많은 메타 데이터를 할당합니다.

이는 utf-8 또는 UTF16 서로게이트 쌍과 같은 유효한 유니코드 인코딩일 수 있습니다.

예, 중국인은 UTF-8, 유니 코드의 구현 (인코딩)입니다. UTF-8은 ASCII 문자의 경우 1 바이트 길이이고 다른 사람들의 경우 최대 4 바이트입니다.

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