首页 > 解决方案 > 如何从 char* 字符串中删除 � UFT8 字符?

问题描述

关于如何替换/忽略来自 C stdio.h getline() 的无效 Unicode/UTF8 字符的问题?我针对这个问题提出了一个可能的解决方案,但我没有设法让它正常工作。

这是完整的例子:

FILE* cfilestream = fopen( "/filepath.txt", "r" );
int linebuffersize = 131072;
char* readline = (char*) malloc( linebuffersize );
char* fixedreadline = (char*) malloc( linebuffersize );

int index;
int charsread;
int invalidcharsoffset;

while( true )
{
    if( ( charsread = getline( &readline, &linebuffersize, cfilestream ) ) != -1 )
    {
        invalidcharsoffset = 0;
        for( index = 0; index < charsread; ++index )
        {
            if( readline[index] != '�' ) {
                fixedreadline[index-invalidcharsoffset] = readline[index];
            } 
            else {
                ++invalidcharsoffset;
            }
        }
        std::cerr << "fixedreadline=" << fixedreadline << std::endl;
    }
    else {
        break;
    }
}

当我编译它时,我收到以下警告:

  $ x86_64-linux-gnu-gcc -g -O0 -Wall -ggdb -std=c++11 
  source/fastfile.cpp:512:44: warning: multi-character character constant [-Wmultichar]
                       if( readline[index] != '�' ) {
                                              ^~~~~

并且在运行程序时,它不会从输入字符串中删除 � 字符Føö�Bår

标签: c++c++11unicodeutf-8

解决方案


推荐阅读