Size: a a a

R (язык программирования)

2020 August 19

AS

Alexey Seleznev in R (язык программирования)
всем привет, такой вопрос дурацкий, у меня есть фрейм в котором есть такое значение в одной из ячеек Schlüsseldienst-ag.ch

при попытке записать его в MySQL ругается

Error: Incorrect string value: '\xC3\xBCssel...' for column 'Domain' at row 1 [1366]

Никоим образом заменить символ  ü на например u у меня не получается, если просто текстом R вписать "Schlüsseldienst-ag.ch" он в консоли сам выводит ü как u обычную.

Ниже скину минимальный пример фрейма.

Перепробывал предложенные тут решения https://stackoverflow.com/questions/17517319/r-replacing-foreign-characters-in-a-string

Но ничего не работает, ü ни на что не меняется в фрейме.
источник

AS

Alexey Seleznev in R (язык программирования)
источник

AS

Alexey Seleznev in R (язык программирования)
фрем из 2 столбцов и 1 строки, символ ü в значение поля domain
источник

IS

Ivan Struzhkov in R (язык программирования)
А если регуляркой указать этот символ тоже не пройдет?
источник

AS

Alexey Seleznev in R (язык программирования)
если руками создать фрейм вот так:

df <- data.frame(id = 1:2,
                name = c("Schlüsseldienst-ag.ch", "Sølvsten.org"), stringsAsFactors = F)


то ошибка не воспроизведётся, R сам меняет неизвестные символы на нормальные
источник

AS

Alexey Seleznev in R (язык программирования)
Ivan Struzhkov
А если регуляркой указать этот символ тоже не пройдет?
неа, не хочет
источник

AS

Alexander Semenov in R (язык программирования)
Кто-нибудь читал? Что скажете? http://www.feat.engineering/index.html
источник

AS

Alexey Seleznev in R (язык программирования)
он не видит ü в регулярке
источник

IS

Ivan Struzhkov in R (язык программирования)
так если через utf кодировку?
источник

AS

Alexey Seleznev in R (язык программирования)
через Encoding(df$domain) возвращает как раз utf-8
источник

AP

Anton Pysanka in R (язык программирования)
указываете при коннекшене к БД энкодинг?
источник

AS

Alexey Seleznev in R (язык программирования)
Ivan Struzhkov
так если через utf кодировку?
кстати, вопрос записи в БД решился, действительно я забыл что там тоже надо кодировку проверить, а там была виндовая
источник

AS

Alexey Seleznev in R (язык программирования)
но вот вопрос как в самом R такие символы заменить не решился. хотя теперь мне это не критично
источник

IS

Ivan Struzhkov in R (язык программирования)
Виндо проблемы)  ну можно указывать прям в utf-8 типо 0xC3
источник

AP

Anton Pysanka in R (язык программирования)
да, возможно нужно пробовать пеерводить в ютф-8 и регуляркой искать \xC3\xBC
источник

A

Andrey in R (язык программирования)
Такое себе, очень косноязычно написано. Аж не верится, что М.Кун писал
источник

IS

Ivan Struzhkov in R (язык программирования)
Я работал какое то время с Тамильским и вьетнамкими языками - пришел к тому что все надо приводить
источник

AS

Alexey Seleznev in R (язык программирования)
Ivan Struzhkov
Виндо проблемы)  ну можно указывать прям в utf-8 типо 0xC3
на стеке вот такой варик был


to.plain <- function(s) {

  # 1 character substitutions
  old1 <- "šžþàáâãäåçèéêëìíîïðñòóôõöùúûüý"
  new1 <- "szyaaaaaaceeeeiiiidnooooouuuuy"
  s1 <- chartr(old1, new1, s)

  # 2 character substitutions
  old2 <- c("œ", "ß", "æ", "ø")
  new2 <- c("oe", "ss", "ae", "oe")
  s2 <- s1
  for(i in seq_along(old2)) s2 <- gsub(old2[i], new2[i], s2, fixed = TRUE)

  s2
}



Но он почему то не фурычит, ну потому что и gsub как бы не видел этой ü
источник

АК

Артём Клевцов... in R (язык программирования)
Alexey Seleznev
всем привет, такой вопрос дурацкий, у меня есть фрейм в котором есть такое значение в одной из ячеек Schlüsseldienst-ag.ch

при попытке записать его в MySQL ругается

Error: Incorrect string value: '\xC3\xBCssel...' for column 'Domain' at row 1 [1366]

Никоим образом заменить символ  ü на например u у меня не получается, если просто текстом R вписать "Schlüsseldienst-ag.ch" он в консоли сам выводит ü как u обычную.

Ниже скину минимальный пример фрейма.

Перепробывал предложенные тут решения https://stackoverflow.com/questions/17517319/r-replacing-foreign-characters-in-a-string

Но ничего не работает, ü ни на что не меняется в фрейме.
1) по замене символов:
> stringi::stri_trans_general("Schlüsseldienst-ag.ch", "latin-ascii")
[1] "Schlusseldienst-ag.ch"
Стоит отметить, что такой подход «портит» данные.
2) Нужно разбираться в кодировке исходных данных, кодировке клиента и сервера база данных. При использование UTF-кодировок, такой проблемы не может возникнуть в принципе.
источник

AS

Alexey Seleznev in R (язык программирования)
Артём Клевцов
1) по замене символов:
> stringi::stri_trans_general("Schlüsseldienst-ag.ch", "latin-ascii")
[1] "Schlusseldienst-ag.ch"
Стоит отметить, что такой подход «портит» данные.
2) Нужно разбираться в кодировке исходных данных, кодировке клиента и сервера база данных. При использование UTF-кодировок, такой проблемы не может возникнуть в принципе.
Артём, там прикол в том, что если ему кормить стокой  "Schlüsseldienst-ag.ch" то всё ок, а если именно в фрейме заменить букву  то R не хочет
источник