gsub в R с заменой юникода дают разные результаты под Windows по сравнению с Unix?

Выполнение следующих команд в R под Mac или Linux дает ожидаемый результат, то есть греческая буква beta:

gsub("<U\\+[0-9A-F]{4}>", "\u03B2", "<U+03B2>")

"\u03B2"

Тем не менее, выполнение первой команды под Windows приводит к неверному результату, а вторая дает правильный бета-вывод. Я попробовал 3 версии R на Windows (3.0.2, 3.1.1 и 3.1.2). Все они последовательно печатали «неправильный» результат. (Невозможно опубликовать вывод, так как у меня нет доступа к Windows.)

Кроме того, возможно ли конвертировать юникоды из формата <U + FFFF> (игнорируя пробел, так как без него сайт ничего не отображает) в "\ uFFFF" с помощью gsub?

Большое спасибо.

ОБНОВИТЬ:

Кража решения MrFlick, я взломал следующее уродливое решение на случай, если в предложении несколько юникодов. Однако исправление действительно ужасно, поэтому не стесняйтесь публиковать улучшения.

test.string <- "This is a <U+03B1> <U+03B2> <U+03B2> <U+03B3> test <U+03B4> string."

trueunicode.hack <- function(string){
    m <- gregexpr("<U\\+[0-9A-F]{4}>", string)
    if(-1==m[[1]][1])
        return(string)

    codes <- unlist(regmatches(string, m))
    replacements <- codes
    N <- length(codes)
    for(i in 1:N){
        replacements[i] <- intToUtf8(strtoi(paste0("0x", substring(codes[i], 4, 7))))
    }

    # if the string doesn't start with a unicode, the copy its initial part
    # until first occurrence of unicode
    if(1!=m[[1]][1]){
        y <- substring(string, 1, m[[1]][1]-1)
        y <- paste0(y, replacements[1])
    }else{
        y <- replacements[1]
    }

    # if more than 1 unicodes in the string
    if(1<N){
        for(i in 2:N){
            s <- gsub("<U\\+[0-9A-F]{4}>", replacements[i], 
                      substring(string, m[[1]][i-1]+8, m[[1]][i]+7))
            Encoding(s) <- "UTF-8"
            y <- paste0(y, s)
        }
    }

    # get the trailing contents, if any
    if( nchar(string)>(m[[1]][N]+8) )
        y <- paste0( y, substring(string, m[[1]][N]+8, nchar(string)) )
    y
}

test.string
trueunicode.hack(test.string)

Результаты:

"This is a <U+03B1> <U+03B2> <U+03B2> <U+03B3> test <U+03B4> string."
"This is a α β β γ test δ string."

Ответы на вопрос(2)

Ваш ответ на вопрос