Декодирование URL Unicode

Это может ответить на вопрос, или вам нужны 0-1 в качестве значений строк?

library(tidyverse)

dat <- tribble(~ID,   ~cd1,      ~cd2,      ~cd3,      ~cd4,
        1,    "231",    "219",    "1321",   "2314",
        2,    "222",    ""      , ""    ,   "",
        3,    "123",    "142",    ""    ,   "",
        4,    "145",    "521",    "2313",   "122")

dat %>% 
  gather("cd_type", "code", 2:5) %>% 
  mutate(flag_var = case_when(
    startsWith(code, "231") ~ 1,
    TRUE ~ 0
  ))
#> # A tibble: 16 x 4
#>       ID cd_type code  flag_var
#>            
#>  1     1 cd1     231          1
#>  2     2 cd1     222          0
#>  3     3 cd1     123          0
#>  4     4 cd1     145          0
#>  5     1 cd2     219          0
#>  6     2 cd2     ""           0
#>  7     3 cd2     142          0
#>  8     4 cd2     521          0
#>  9     1 cd3     1321         0
#> 10     2 cd3     ""           0
#> 11     3 cd3     ""           0
#> 12     4 cd3     2313         1
#> 13     1 cd4     2314         1
#> 14     2 cd4     ""           0
#> 15     3 cd4     ""           0
#> 16     4 cd4     122          0

Или сделать это, чтобы вернуться в исходный широкоформатный формат

dat %>% 
  gather("cd_type", "code", 2:5) %>% 
  mutate(flag_var = case_when(
    startsWith(code, "231") ~ 1,
    TRUE ~ 0
  )) %>% 
  spread(cd_type, code) %>% 
  select(ID, cd1:cd4, flag_var)
#> # A tibble: 6 x 6
#>      ID cd1   cd2   cd3   cd4   flag_var
#>           
#> 1     1   219   1321           0
#> 2     1 231       2314         1
#> 3     2 222   ""    ""    ""           0
#> 4     3 123   142   ""    ""           0
#> 5     4 145   521     122          0
#> 6     4     2313           1

Создано в 2019-01-19 пакетом Представить (v0.2.1) sup>

7
задан Jonathan Lonowski 1 October 2008 в 01:44
поделиться

3 ответа

Согласно Википедии:

Текущий стандарт

Универсальные мандаты синтаксиса URI, что новые схемы URI, которые предусматривают представление символьных данных в URI, должны, в действительности, представить символы от незарезервированного набора без перевода, и должен преобразовать все другие символы в байты согласно UTF-8, и затем процент - кодирует те значения. Это требование было представлено в январе 2005 с публикацией RFC 3986. Схемы URI, представленные перед этой датой, не затронуты.

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

Нестандартные реализации

Там существует нестандартное кодирование для символов Unicode: %uxxxx, где xxxx является значением Unicode, представленным как четыре шестнадцатеричных цифры. Это поведение не указано никаким RFC и было отклонено W3C. Третий выпуск ECMA-262 все еще включает Escape (строка) функция, которая использует этот синтаксис, но также и encodeURI (uri) функция, которая преобразовывает в UTF-8, и процент - кодирует каждый октет.

Так, это похоже на полностью до человека, пишущего незакодировать метод... Разве стандарты не являются забавой?

7
ответ дан 7 December 2019 в 07:52
поделиться

То, что я всегда делал, является первым UTF-8, кодируют строку Unicode для создания этого серией 8-разрядных символов прежде, чем выйти из любого из тех, которые имеют %HH.

P.S. - я могу только надеяться, что нестандартные реализации (%uxxxx) немногочисленны.

0
ответ дан 7 December 2019 в 07:52
поделиться

Начиная с URI были представлены, прежде чем unicode был вокруг, или по крайней мере в широком использовании, я предполагаю, что это очень конкретный вопрос реализации. Кодировка UTF-8 Ваш текст, затем выходя из этого на нормальный походит на лучшую идею, так как это полностью назад совместимо с любыми системами ASCII/ANSI на месте, хотя Вы могли бы получить нечетный странный символ или два.

На другом конце, для декодирования Вы не вышли бы из своего текста и получили бы строку UTF-8. Если кто-то использующий более старую систему пытается отправить Вашему некоторые данные в ASCII/ANSI, нет никакого причиненного вреда, это уже - (почти) UTF-8, закодированный.

0
ответ дан 7 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

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