значение символа Юникода

Вопрос: Каков правильный порядок расширенных символов Юникода по значению?

Если я сортирую в Excel список символов Unicode, порядок будет другим, чем если бы я использовал Excel «= code ()» и сортировал по этим значениям. Цель состоит в том, чтобы я хотел измерить расстояние между символами, например a-b = 1 и &-% = 1; при сортировке с помощью функции сортировки Excel два символа, упорядоченные в пределах трех, имеют значения, равные 134.

Кроме того, некоторые символы char в Excel являются пустыми, а некоторые встречаются дважды с помощью команды «find» и представляют собой два разных символа — а пара вообще не найдена. Пожалуйста, объясните детали этих «специальных» символов.

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

образец кода:

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

РЕДАКТИРОВАТЬ:
Чтобы выяснить значения UNICODE в c ++ vs2008, я запускал каждый код для сравнения кода 1 с кодом 255 с кодом 1

cout << mem << " code " << key << " is " << abs(key[0] - '') << " from " << endl;

В скобках — черное счастливое лицо, для которого на этом сайте нет шрифта, но есть окно командной строки, в vs2008 это выглядит как полупост | с правой половины T. Excel оставляет пустым.

Следующие Unicodes не обрабатываются в c ++ vs2008 с библиотекой std и #include
9, 10, 13, 26, 34, 44,

И числовое «расстояние» для кодов с 1 по 127 правильное, но на 128 расстояние пропускает лишнее и по некоторой причине еще больше. Затем с 128 до 255 расстояние меняется на противоположное и становится ближе; 255 это 2 от 1 »

Было бы хорошо, если бы они следовали чему-то более логичному и были бы всего от 1 до 255 без икоты или пропусков и разворотов, а 255-1 = 254, но эй, что я знаю.

РЕДАКТИРОВАТЬ 2: Я нашел это — без абсолюта — сортировка для UNIFORMAT составляет от 128 до 255, затем от 1 до 127 и дает от 1 до 255 с 6 пропусками для 9, 10, 13, 26, 34, 44, которые являются мусором. Это не было интуитивно понятно. В новом порядке 128-> 255,1-> 127 странный переход от 127 до 128 более понятен, потому что нет 0, поэтому значение отсутствует между 255 и 1.

РЕШЕНИЕ: создайте свою собственную хеш-таблицу со значениями для каждого символа и не полагайтесь на библиотеку c ++ std или vs2008 для предоставления значений UNIFORMAT, поскольку они не подходят для измерения расстояния между символами вне нескольких определенных подмножеств UNIFORMAT.

1

Решение

Unicode не имеет определенного порядка сортировки (или сортировки). Когда Excel сортирует, он использует таблицы на основе выбранного языка. Например, кто-то, использующий Excel в режиме английского языка, может получить другие результаты сортировки, чем кто-то, использующий Excel на португальском языке.

Есть также вопросы нормализации. В Unicode один «символ» не обязательно соответствует одному значению. Некоторые символы могут быть представлены по-разному. Например, заглавная омега может быть закодирована как греческая буква или как символ для обозначения единиц электрического сопротивления. В некоторых языках один символ может состоять из нескольких последовательных значений.

Пустые значения, вероятно, соответствуют глифам, для которых у вас нет покрытия шрифтов. Некоторые системы используют так называемые «шрифты Unicode», которые имеют большой процент глифов, необходимых для каждого скрипта. Windows имеет тенденцию переключать шрифты на лету, когда текущий шрифт не имеет необходимого символа. Ни один из подходов не будет иметь все необходимые символы. Кроме того, некоторые значения Unicode не кодируются в видимый глиф (например, в Unicode есть много разных типов пробелов), некоторые значения действуют больше как коды элементов управления в стиле ASCII (например, разделитель абзацев или элементы управления bidi), а некоторые значения имеет смысл только тогда, когда они объединяются с другим персонажем, как многие из «комбинирующих» акцентов.

Так что нет ответа, которым вы будете удовлетворены. Возможно, если бы вы дали больше информации о том, что вы в конечном итоге пытаетесь сделать, мы могли бы предложить другой подход.

4

Другие решения

Я не думаю, что вы можете делать то, что вы хотите делать в Excel, без существенного ограничения вашего подхода.

Экспериментально функция Code никогда не вернет значение выше 255. Если вы используете какой-либо текст в кодировке Unicode, который не может быть сгенерирован с помощью этого кода VBA, он будет интерпретирован как знак вопроса (?) Или 63.

For x = 1 To 255
Cells(x, 1).Value = Chr(x)
Next

Вы должны быть в состоянии определить разницу с помощью кода. Но если персонаж не попадает в эту область, вам нужно выйти за пределы Excel, потому что даже VBA преобразует любые другие символы Unicode в знак вопроса (?) Или 63.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector