1local_ctype <- function(mode = c("C", "UTF-8"), env = parent.frame()) { 2 mode <- match.arg(mode) 3 4 if (mode == "UTF-8") { 5 sysname <- Sys.info()[["sysname"]] 6 if (sysname == "Windows") { 7 ctype <- "English_United States.1252" 8 } else if (sysname == "Darwin") { 9 ctype <- "UTF-8" 10 } else { 11 ctype <- "en_US.utf8" 12 } 13 } else { 14 ctype <- "C" 15 } 16 17 ctype0 <- Sys.getlocale("LC_CTYPE") 18 suppressWarnings({ 19 withr::local_locale(LC_CTYPE = ctype, .local_envir = env) 20 }) 21 if (Sys.getlocale("LC_CTYPE") != ctype) { 22 skip(paste0("Cannot change locale to '", ctype, "'")) 23 } 24 if (mode == "UTF-8" && !output_utf8()) { 25 skip("Cannot change to UTF-8 output") 26 } 27 28 ctype0 29} 30 31with_ctype <- function(mode = c("C", "UTF-8"), code) { 32 local_ctype(mode) 33 force(code) 34} 35