Pergunta

Alguém já lidou com o uso de funções std::string para MBCS?Por exemplo em C eu poderia fazer isso:

p = _mbsrchr(path, '\\');

mas em C++ estou fazendo isso:

found = path.find_last_of('\\');

Se o byte da trilha for uma barra, find_last_of pararia no byte da trilha?Também a mesma pergunta para std::wstring.

Se eu precisar substituir todos os caracteres de um caractere por outro, digamos todas as barras com barras invertidas, qual seria a maneira correta de fazer isso?Eu teria que verificar cada caractere em busca de um byte substituto principal e depois pular a trilha?No momento estou fazendo isso para cada wchar:

if( *i == L'/' )
*i = L'\\';

Obrigado

Editar:Como David aponta corretamente, há mais coisas com que lidar quando se trabalha com páginas de código multibyte. Microsoft diz usar _mbclen para trabalhar com índices de bytes e MBCS.Não parece que posso usar find_last_of de forma confiável ao trabalhar com as páginas de código ANSI.

Foi útil?

Solução

Você não precisa fazer nada de especial em relação aos pares substitutos.Uma única unidade de caracteres de 16 bits que é metade de um par substituto também não pode ser uma unidade de caracteres não substituta.

Então,

if( *i == L'/' )
    *i = L'\\';

está perfeitamente correto.

Da mesma forma você pode usar find_last_of com wstring.

É mais complicado para páginas de código ANSI multibyte.Você precisa lidar com problemas de bytes iniciais e finais.Minha recomendação é normalizar para uma codificação mais razoável se você realmente precisar lidar com datas ANSI multibyte.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top