Как объединить две кодовые точки, чтобы получить одну?

Я знаю, что кодовая точка Юникода для Á — это U+00C1. Я читал в Интернете и на многих форумах и в статьях, что я также могу сделать Á, комбинируя символы ´ (юникод: U+00B4) и A (юникод: U+0041).

Мой вопрос прост. Как это сделать? Я пробовал что-то вроде этого. Я решил попробовать это на golang, но прекрасно, если кто-то знает, как это сделать на python (или на каком-то другом языке программирования). Это не имеет значения для меня.

Хорошо, поэтому я попробовал дальше.

A в двоичном формате: 01000001

´ в двоичном формате: 10110100

Вместе это занимает 15 бит, поэтому мне нужен формат UTF-8 3 байта (1110xxxx 10xxxxxx 10xxxxxx)

Заполнив биты из A и ´ (первый A) вместо x, получится следующее: 11100100 10000110 10110100.

Затем я преобразовал полученные три байта обратно в шестнадцатеричные значения: E4 86 B4.

Однако, когда я попытался написать это в коде, у меня получился совсем другой персонаж. Другими словами, мое решение работает не так, как я ожидал.

package main

import (
    "fmt"
)

func main() {
    r := "\xE4\x86\xB4"

    fmt.Println(r) // It wrote 䆴 instead of Á
}

14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
2
0
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Похоже, что предоставленный вами символ ´ (U+00B4) на самом деле не является комбинированным символом, как его определяет Unicode.

>>> "A\u00b4"
'A´'

Если вместо этого мы используем ◌́ (U+0301), то мы можем просто поместить его в последовательность с таким символом, как A, и получить ожидаемый результат:

>>> "A\u0301"
'Á'

Если я не понимаю, что вы имеете в виду, не похоже, что здесь нужны какие-либо бинарные манипуляции или хитрости.

Спасибо! Ну, я сделал это более сложным, чем это есть на самом деле.

Filip 20.11.2022 04:46

Как объясняет StardustGogeta в своем ответе, правильным комбинированным символом Unicode для «острого» акцента является U + 0301 (Combining Acute Accent).

Но в Go строка, состоящая из одного символа U+00C1 (латинская заглавная буква A с острым ударением), не равна строке, состоящей из U+0041 (латинская заглавная буква A), за которой следует U+0301 (сочетание острого ударения). )

Если вы хотите сравнить строки, вам нужно нормализовать их к одной и той же форме нормализации. Подробнее см. в записи блога Нормализация текста в Go.

В следующем фрагменте кода показано, как это сделать:

package main

import (
    "fmt"

    "golang.org/x/text/unicode/norm"
)

func main() {
    combined := "\u00c1"
    combining := "A\u0301"
    fmt.Printf("combined = %s, combining = %s\n", combined, combining)
    fmt.Printf("combined == combining: %t\n", combined == combining)
    combiningNormalised := string(norm.NFC.Bytes([]byte(combining)))
    fmt.Printf("combined == combiningNormalised: %t\n", combined == combiningNormalised)
}

Вывод:

combined = Á, combining = Á
combined == combining: false
combined == combiningNormalised: true

Другие вопросы по теме