2012-10-05 2 views
1

질문 : 값으로 유니 코드 확장 기호의 올바른 순서는 무엇입니까?유니 코드 char 값

유니 코드 문자 목록을 정렬하는 데 Excel을 사용하면 Excel "= code()"를 사용하여 그 값으로 정렬 할 때와 다른 순서가됩니다. 그 목적은 문자 사이의 거리를 측정하고자하는 것입니다 (예 : a-b = 1 및 & - % = 1; Excel 정렬 기능으로 정렬 할 때 3 개 안에 정렬 된 두 개의 문자는 134 자리의 값을 갖는 것처럼 보입니다.

또한 일부 문자 기호는 Excel에서 비어 있고 여러 기호는 '찾기'로 두 번 발견되며 두 개의 다른 기호이며 한 쌍은 전혀 없습니다. 이 '특별'문자의 세부 사항을 설명하십시오.

http://en.wikipedia.org/wiki/List_of_Unicode_characters

샘플 코드 :

int charDist = abs(alpha[index] - code[0]); 

EDIT : 는 C의 UNICODE 값을 알아낼 ++ VS2008는 I 코드 1

에 대한 코드 (255)에 코드 (1)로부터 비교 각 코드를 실행
cout << mem << " code " << key << " is " << abs(key[0] - '') << " from " << endl; 

대괄호 안에는이 웹 사이트에 글꼴이 없지만 명령 창이 나타나지 않는 검은 색 행복한 얼굴이 있습니다. vs2008에서 보입니다. 하프 포스트처럼 | T. Excel의 오른쪽 절반은 공백으로 남겨 둡니다.

다음 Unicodes는 127 번호 1의 표준 라이브러리 및 #INCLUDE 9, 10, 13, 26, 34, 44,

그리고, 숫자 '거리'를 VS2008 ++ C에 처리되지

정확하지만 128에서 거리는 여분을 건너 뛰고 어떤 이유로 더 멀리 떨어져 있습니다. 그러면 128에서 255까지 거리가 바뀌고 가까워집니다. 255는 1 '에서 2 분

이러한 것들이 더 논리적으로 뒤따를 경우 딸꾹질이나 건너 뛰기 및 뒤집기가없고 단지 1에서 255까지만 가능하고 255-1 = 254이지만 이봐, 내가 아는 것은 좋을 것이다.

EDIT2 : UNIFORMAT의 데이터 정렬은 128에서 255까지이며 1에서 127까지이며 쓰레기 9, 10, 13, 26, 34, 44에 대한 6 건너 뛰기로 1에서 255까지입니다 . 그것은 직관적이지 않았습니다. 새로운 순서 128-> 255,1-> 127에서 127에서 128 사이의 이상한 건너 뛰기가 더 명확합니다. 0이 없기 때문에 255와 1 사이의 값이 누락되었습니다.

해결 방법 : 내 자신의 해시 테이블 만들기 UNIFORMAT 값을 제공하기 위해 C++ std 라이브러리 나 vs2008에 의존하지 않습니다. UNIFORMAT의 몇몇 특정 서브 세트 외부에서 char 거리를 측정하기에는 올바르지 않기 때문입니다.

+5

달성하려는 작업 ? 이것은 내게 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)처럼 보입니다 – sehe

+1

임의의 유니 코드 데이터를 정렬하는 것은 대단히 복잡한 문제입니다. 일부 언어 (예 : 스페인어, * ch * 및 * ll *)의 정렬 규칙이 정렬 목적으로 하나의 문자로 취급되므로 ASCII 문자의 숫자 값을 정렬하는 것만 큼 간단하지 않습니다. 정말로 해결하려는 문제는 무엇입니까? –

+3

문자 집합에서 코드 포인트의 순서 지정은 편집 거리가 아닌 [데이터 정렬] (http://en.wikipedia.org/wiki/Collation)이며 [Hamming] (http : // en. wikipedia.org/wiki/Hamming_distance) 또는 [Levenshtein] (http://en.wikipedia.org/wiki/Levenshtein_distance) 예 : – sehe

답변

4

유니 코드에는 정렬 (또는 데이터 정렬) 순서가 정의되어 있지 않습니다. Excel이 정렬되면 현재 선택된 언어를 기반으로하는 테이블을 사용합니다. 예를 들어, 영어 모드에서 Excel을 사용하는 사람은 포르투갈어로 Excel을 사용하는 다른 정렬 결과를 얻을 수 있습니다.

정규화 문제도 있습니다. 유니 코드의 경우 하나의 "문자"가 반드시 하나의 값과 일치하지는 않습니다. 일부 문자는 다른 방식으로 나타낼 수 있습니다. 예를 들어, 자본 오메가는 그리스어 문자 또는 전기 저항 단위를 나타내는 기호로 코딩 할 수 있습니다. 일부 언어에서는 한 문자가 여러 개의 연속 된 값으로 구성 될 수 있습니다.

공백 값은 글꼴이없는 문자 모양 일 가능성이 높습니다.일부 시스템에서는 모든 스크립트에 필요한 글리프의 비율이 큰 소위 "유니 코드 글꼴"을 사용합니다. Windows는 현재 글꼴에 필요한 글리프가없는 경우 즉시 글꼴을 전환하는 경향이 있습니다. 어느 방법도 모든 글리프 (glyph)를 필요로하지 않습니다. 또한 일부 유니 코드 값은 보이는 글리프 (예 : 유니 코드에 여러 가지 종류의 공백이 있음)로 인코딩되지 않으며, 일부 값은 ASCII 스타일 컨트롤 코드 (예 : 단락 구분 기호 또는 양방향 조절)와 유사하게 작동하고 일부 값 "결합하는"악센트와 같이 다른 캐릭터와 결합 할 때만 의미가 있습니다.

그래서 만족할 답변이 없습니다. 어쩌면 궁극적으로 무엇을하려고하는지 더 많은 정보를 제공한다면 다른 접근 방식을 제안 할 수 있습니다.

+0

@Adrian_McCarthy, 감사합니다. 언어에 따라 가장 좋은 시나리오에서는 999 개의 기호를 갖고 싶습니다. 곧 사용할 수있을 것이라고 생각합니다. 지금은 내 사건에 실제로 존재하는 '실제'시나리오에 대해 255 가지가 작동합니다. 나는 해시와 연관된 문자열로 기호를 읽으므로 문자열에서 해시로 단일 기호로 해시하고 다시 문자열로 해시 될 때까지 인쇄물을 사용할 수 있습니다. 나는 사용한다 * ? 와일드를위한 z. –

+0

excel에서 countif (255 char, this char)는 * 255자를 반환합니다. 대개 *는 'all'의 와일드 카드이며 Excel이 thai를 인식하고 모든 char를 일치로 반환한다고 가정합니다. 같은 거? –

1

접근 방식을 크게 제한하지 않고 Excel에서 수행하려는 작업을 수행 할 수 있다고 생각하지 않습니다.

실험으로 코드 기능이 VBA 코드를 통해 생성 할 수없는 유니 코드 텍스트를 사용하는 경우 (?)가 물음표로 해석됩니다, 255보다 높은 값을 반환하거나 63

않습니다
For x = 1 To 255 
    Cells(x, 1).Value = Chr(x) 
Next 

코드를 사용하여 차이를 확인할 수 있어야합니다. 그러나 문자가 해당 영역에 속하지 않으면 VBA조차도 다른 유니 코드 문자를 물음표 (?) 나 63으로 변환하기 때문에 Excel 외부로 나가야합니다.

+0

@Daniel_Cook, 감사합니다.나는 UNICODE 심볼 열과 각 심볼과 연관시키고 자하는 문자열의 컬럼을 가진 csv 파일을 만들기 위해 Excel을 사용했다. 예를 들어, "003"== '3'; 귀하의 충고는 C++에서 유사한 기호를 사용하여 어떤 기호가 인식되는지와 각 기호의 조합 된 값을 찾으려고했습니다. –