Как я перевожу символы на 8 битов в символы на 7 битов? (т.е. Ü к U)

ReactDOM.render может обрабатывать массив компонентов.

function clickListado() {
    retornoDB(function (data) {
        let json = JSON.parse(data);
        const domContainer = document.querySelector('#en_proceso');

        let Images = json.map((img, index) => <CargarImagen ruta={img.ruta} name={img.nombre} key={index}/>);

        ReactDOM.render(Images, domContainer);

    });
}
21
задан Michael Pryor 26 September 2008 в 16:05
поделиться

14 ответов

Действительно, как предложено не существуйте: функция "iconv" существует для обработки всего странного преобразования для Вас, доступна почти на всем языке программирования и имеет специальную опцию, которая пытается преобразовать символы, отсутствующие в целевом наборе с приближениями.

Использование iconv для простого преобразования входа UTF-8 представляют в виде строки к ASCII на 7 битов.

Иначе, Вы будете всегда заканчивать совершающий нападки угловой случай: вход на 8 битов с помощью другой кодовой страницы с другим набором символов (таким образом не работающий вообще с таблицей преобразования), забыл отображать один последний глупый символ с диакритическим знаком (Вы отобразили всю могилу/акут, но забыли отображать чешский caron или скандинава 'В °'), и т.д.

, Конечно, если Вы хотите применить решение небольшой определенной проблемы (делающий файловую систему дружественные имена файлов для Вашей музыкальной коллекции), массивы поиска являются способом пойти (или массив, который для каждого номера кода выше 128 карт приближение под 128, как предложено JeeBee или парами источника/цели, предложенными вице-айсбергом, в зависимости от которого функции замены уже доступны на Вашем предпочтительном языке), потому что это быстро взламывается вместе и быстро проверяет на недостающие элементы.

5
ответ дан 29 November 2019 в 06:16
поделиться

Массив поиска является, вероятно, самым простым и самым быстрым способом выполнить это. Это - один способ, которым можно преобразовать, говорят, ASCII к EBCDIC.

0
ответ дан 29 November 2019 в 06:16
поделиться

Верхние 128 символов не имеют стандартных значений. Они могут взять различные интерпретации (кодовые страницы) в зависимости от языка пользователя.

, Например, см. португальский язык по сравнению с французский канадец

, Если Вы не будете знать кодовую страницу, Ваш "перевод" иногда будет неправильным.

, Если Вы собираетесь принять определенную кодовую страницу (например, исходную кодовую страницу IBM) затем, массив перевода будет работать, но для истинных международных пользователей, это будет неправильно много.

Это - одна причина, почему unicode одобрен по более старой системе кодовых страниц.

Строго говоря, ASCII составляет только 7 битов.

0
ответ дан 29 November 2019 в 06:16
поделиться

Преобразовывает Гњ в U действительно, что требуется сделать? Я не знаю о других языках, но в немецком Гњ стал бы Ue, Г ¶ станет oe, и т.д.

11
ответ дан 29 November 2019 в 06:16
поделиться

Большинство языков имеет стандартный способ заменить символы с диакритикой стандартным ASCII, но он зависит от языка, и он часто связал замену единственного символа с диакритикой с двумя ASCII. например, в немецком Гј становится ue. Таким образом, если Вы хотите обработать естественные языки правильно, это намного более сложно, чем Вы думаете, что это.

17
ответ дан 29 November 2019 в 06:16
поделиться

Я думаю, что Вы просто не можете.

я обычно делаю что-то как этот:

AccentString = 'ГЂГ‚ Г „ÉÈÊ [и все другие]'
ConvertString = 'AAAEEE [и все другие]'

Поиск символа в AccentString и замене его для того же индекса в ConvertString

HTH

6
ответ дан 29 November 2019 в 06:16
поделиться

В кодовой странице 1251 символы кодируются с 2 байтами: один для основного символа и один для изменения. Затем когда Вы кодируете назад в ASCII, только основные символы сохранены.

public string RemoveDiacritics(string text)
{

  return System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(text));

}

От: http://www.clt-services.com/blog/post/Enlever-les-accents-dans-une-chaine - (proprement) .aspx

6
ответ дан 29 November 2019 в 06:16
поделиться

Гм, почему не только изменяют кодирование строки с iconv?

1
ответ дан 29 November 2019 в 06:16
поделиться

Вы, кажется, закрепили его, я думаю. Массив 128 байтов длиной байтов, индексированных char& 127, содержа соответствующий 7-разрядный символ для 8-разрядного разрядного символа.

1
ответ дан 29 November 2019 в 06:16
поделиться

Это действительно зависит от природы Ваших исходных строк. Если Вы знаете кодирование строки, и Вы знаете, что это - 8-разрядное кодирование —, например, латынь ISO 1 или подобный — затем, простой статический массив достаточен:

static const char xlate[256] = { ..., ['é'] = 'e', ..., ['Ü'] = 'U', ... }
...
new_c = xlate[old_c];

, С другой стороны, если у Вас есть другое кодирование, или если Вы используете UTF-8, закодировал строки, Вы, вероятно, найдете функции в библиотека ICU очень полезный.

1
ответ дан 29 November 2019 в 06:16
поделиться

Существует статья о CodeProject, который выглядит хорошим.

Также преобразование с помощью кодовой страницы 1251 интересуется (см. другой ответ).

мне не нравятся таблицы преобразования, так как количество символов в Unicode - то, что большой Вы легко пропускаете тот.

1
ответ дан 29 November 2019 в 06:16
поделиться

Я думаю, что Вы уже закрепили его на голове. Учитывая Ваш ограниченный домен, массив преобразования или хеш Ваш лучший выбор. Никакой смысл, создающий что-либо сложное, чтобы попытаться автоволшебно сделать это.

0
ответ дан 29 November 2019 в 06:16
поделиться

Я использую эту функцию, чтобы исправить переменную с акцентами для перехода к функции мыла из VB6:

Function FixAccents(ByVal Valor As String) As String

    Dim x As Long
    Valor = Replace(Valor, Chr$(38), "&#" & 38 & ";")

    For x = 127 To 255
        Valor = Replace(Valor, Chr$(x), "&#" & x & ";")
    Next

    FixAccents = Valor

End Function

А внутри функции мыла я делаю это (для переменной Filename):

FileName = HttpContext.Current.Server.HtmlDecode(FileName)
0
ответ дан 29 November 2019 в 06:16
поделиться

Попробуйте программу uni2ascii .

0
ответ дан 29 November 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: