背景
我有一个函数,将Tibble(或data.frame,不要紧)作为输入,并在文本文件中生成自定义Markdown表。数据来自RESTful API(如果您必须知道,则为AirTable);是UTF-8编码的;已经包含Unicode字符(例如¥和€);并通过httr
,jsonlite
和tibble
包中的函数处理成Tibble。我已经通过基本的Encoding
函数确认了Tibble列中的数据是UTF-8。
编辑:我正在Windows 10上运行R 3.5.1。
问题
当我使用cat
将Tibble中的数据打印到文件中时,它可以正常工作。货币符号和文本中的任何其他疯狂内容都可以正常打印。 (尽管,奇怪的是,最终的文件编码似乎是ANSI。)
但是...在创建Markdown表时,我试图将FALSE
时的逻辑列转换为空白字符串,而当TRUE
时将其转换为☑字符。该符号不在数据中,因此我需要使用函数将其写入其中。但是,它总是从字面上打印为字符串<U+2611>
。
真正令人好奇的是,如果我告诉cat
打印到控制台而不是文件到控制台,则无需进行任何其他更改即可。我很困惑。
我尝试过的事情
首先,我尝试使用intToUtf8
函数,传入符号的小数表示形式(9745)。我尝试直接在cat
语句中使用它,还尝试先将结果保存到变量中,然后将其传递到cat
语句中。
然后,我尝试直接将字符复制粘贴到R文件中的字符串中。如上所述,我尝试通过变量直接或间接传递它。
最后,我读了这样的内容:Print unicode character string in R,并使用了转义的unicode序列来插入字符。再次,我尝试了两种方法-直接在cat
语句中和间接作为变量-但结果是相同的。
(我没有按照以上答案的建议尝试使用stringi
软件包,但是我没有遇到与个人所遇到的完全相同的问题,因此我不确定情况会不会更好。)