knitr::opts_chunk$set(error = TRUE)

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
unenc_name <- enc_name <- "ö"
Encoding(enc_name) <- "UTF-8"
Encoding(unenc_name) <- "unknown"

unenc_df <- enc_df <- data.frame(a=1)
names(enc_df) <- enc_name
names(unenc_df) <- unenc_name

Names of data frames encoded differently

Encoding(names(enc_df))
## [1] "UTF-8"
Encoding(names(unenc_df))
## [1] "unknown"

Fails:

left_join(enc_df, unenc_df)
## Joining by: "ö"
## Error in left_join_impl(x, y, by$x, by$y): attempt to set index 0/0 in SET_STRING_ELT
left_join(unenc_df, enc_df)
## Joining by: "ö"
## Error in left_join_impl(x, y, by$x, by$y): attempt to set index 0/0 in SET_STRING_ELT

Works:

left_join(unenc_df, unenc_df)
## Joining by: "ö"
##   ö
## 1 1
left_join(enc_df, enc_df)
## Joining by: "ö"
##   ö
## 1 1