Estou com problemas ao tentar ler alguns dados de um arquivo em C.
Já tentei várias métodos de leitura e já pesquisei durante um tempo razoável, mas sem sucesso (ainda).
Preciso ler caracteres unicode(utf-16 [padrão do Windows?]) de um arquivo. Estive tentando com wchar_t, já que o tipo básico char não é adequado (apenas 1 byte) . As linhas de meu arquivo seguem o seguinte padrão de tipo de dados:
[wchar_t][wchar_t][unsigned long]
exemplo:
á,1000
ù,566
Observe que o segundo caracter é sempre uma vírgula (",").
Sempre que imprimo o que acabei de ler do arquivo, sai caracteres diferentes dos esperados (coloco "é" aparece "Ú", por exemplo). O unsigned long particularmente não tenho tido problemas.
Vou colocar os trechos principais da leitura aqui, das diversas formas que tentei. Utilizo Dev-C++ 4.9.9.2.
Variáveis:
wchar_t caracter, virgula;
unsigned long ocorrencia;
Tamanho do wchar_t:
printf("\nTamanho do wchar_t = %d",sizeof(wchar_t));
-- Esse printf me retorna 2(dois)...[bytes ou 16 bits casando com o tamanho do utf-16 (ao menos teoricamente)]
Tentativas:
while(!feof(arquivoEntrada))
{
fscanf(arquivoEntrada,"%lc%lc%lu\n", &caracter, &virgula, &ocorrencia);
printf("\n %lc %lc %lu ", caracter, virgula, ocorrencia);
}
--Aqui também já consegui ler sem esse "\n", apenas utilizando uma variável auxiliar qualquer para lê-lo.
--Os conversores "lc" podem ser substitudos por "C" (maíusculo).
setlocale(LC_CTYPE, "");
while (WEOF != (letra = getwc(arquivoEntrada)))
{
printf("Char %lc",caracter);
getchar();
}
--Sinceramente, esse setlocale foi puramente experimental.
wchar_t caracteres[2];
//Algum loop aqui...
fread(caracteres, sizeof(wchar_t),2,arquivoEntrada);
fread(ocorrencia,sizeof(unsigned long),1,arquivoEntrada);
--Aqui também já li o "\n" e modifiquei bastante quase tentativa e erro :(
Também já utilizei o fgetws() e também sem resultados... geralmente tenho alguns problemas inicialmente quando tento algo nvo, mas depois que arrumo o código, todos apresentam basicamente a mesma saída errada. O arquivo (.txt) está no formato Unicode, já fiz alguns testes também em ANSI. Provavelmente tem um erro teórico relacionado a codificação de textos...
Espero que me ajudem, já postei esta dúvida em muitos fóruns ;P
Abraços e agradeço desde já só por ter lido a minha dúvida.
Pergunta
Batoca
Estou com problemas ao tentar ler alguns dados de um arquivo em C.
Já tentei várias métodos de leitura e já pesquisei durante um tempo razoável, mas sem sucesso (ainda).
Preciso ler caracteres unicode(utf-16 [padrão do Windows?]) de um arquivo. Estive tentando com wchar_t, já que o tipo básico char não é adequado (apenas 1 byte) . As linhas de meu arquivo seguem o seguinte padrão de tipo de dados:
[wchar_t][wchar_t][unsigned long]
Observe que o segundo caracter é sempre uma vírgula (",").
Sempre que imprimo o que acabei de ler do arquivo, sai caracteres diferentes dos esperados (coloco "é" aparece "Ú", por exemplo). O unsigned long particularmente não tenho tido problemas.
Vou colocar os trechos principais da leitura aqui, das diversas formas que tentei. Utilizo Dev-C++ 4.9.9.2.
Variáveis:
Tamanho do wchar_t: Tentativas:Também já utilizei o fgetws() e também sem resultados... geralmente tenho alguns problemas inicialmente quando tento algo nvo, mas depois que arrumo o código, todos apresentam basicamente a mesma saída errada. O arquivo (.txt) está no formato Unicode, já fiz alguns testes também em ANSI. Provavelmente tem um erro teórico relacionado a codificação de textos...
Espero que me ajudem, já postei esta dúvida em muitos fóruns ;P
Abraços e agradeço desde já só por ter lido a minha dúvida.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.