【发布时间】:2014-12-17 13:12:51
【问题描述】:
我正在尝试从旧的 FAME 数据库文件中获取正确的字符描述。基本上这是可行的,但是变音符号等没有正确打印。基本上,R Package FAME 中包含的以下 C 函数与其说是 R 问题,不如说是 C 问题。
void fameWhat(int *status, int *dbkey, char **objnam, int *class,
int *type, int *freq, int *basis, int *observ,
int *fyear, int *fprd, int *lyear, int *lprd,
int *obs, int *range,
int * getdoc, char **desPtr, char **docPtr){
/* Get info about an object. Note that range should be an int[3] on input */
int cyear, cmonth, cday, myear, mmonth, mday;
int i;
char fdes[256], fdoc[256];
if(*getdoc){
if(strlen(*desPtr) < 256 || strlen(*docPtr) < 256){
*status = HBNCHR;
return;
}
for(i = 0; i < 255; ++i) fdes[i] = fdoc[i] = ' ';
}
fdes[255] = fdoc[255] = '\0';
cfmwhat(status, *dbkey, *objnam, class, type, freq, basis, observ,
fyear, fprd, lyear, lprd, &cyear, &cmonth, &cday, &myear,
&mmonth, &mday, fdes, fdoc);
if(*getdoc){
strncpy(*desPtr, fdes, 256);
strncpy(*docPtr, fdoc, 256);
}
if(*status == 0 && *class == HSERIE)
cfmsrng(status, *freq, fyear, fprd, lyear, lprd, range, obs);
return;
}
我觉得由于指向描述的指针 desPtr 的指针是 char 类型的事实,当从 R 调用此函数并在 R 控制台中显示结果时,我没有得到任何正确的变音符号.我有一种预感,FAME 是 Latin-1 编码的。 R 是 UTF-8。例如,对于ä,我得到\U3e34653c。
那么有没有办法在 C 中完成它并将正确的值传递给 R 或者我应该在 R 中搜索和替换?
注意:我看过这个帖子 Using Unicode in C++ source code 和这个 How to use utf8 character arrays in c++? 。
【问题讨论】: