Dear all,

I have a weird problem reading a file using fgets. The code below should read the first line of the file "F:\\filename.csv". It works for all sorts of files that I create myself, but it does NOT work for certain files that I download from the internet.

More precisely, I download a csv file from Google Insight (see http://www.google.com/insights/search/#q=London&cmpt=q), and when I try the code on the downloaded file, I don't get the first line but the string has the following value: "ÿþW", which displays as a little square, followed by a capital "W".

Any ideas what's going wrong?
This is the code that I'm using:

#include <stdio.h>
#include <string.h>

int main ()
{
   FILE *in=fopen("F:\\filename.csv","r"); 
   char mystring [100];
   fgets (mystring , 100 , in); 
   puts (mystring);
   fclose (in);
   return 0;
}

I appreciate any help!
Thanks a lot,
Anne

Recommended Answers

All 9 Replies

Welcome anne_1000,
Google csv is unicode text file.

Hi adatapost!
Thanks a lot for the useful hint. Do you know of any straightforward way of either converting theGoogle csv file to ASCII, or reading a Unicode file in C/C++? I tried googleing how to do that, but the answers seem to be extremely complicated...

Thnx,
Anne

Hi adatapost,
thanks again. I tried using wstring, but the following code does not even compile, and I can't quite figure out why.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
	
	ifstream myfile("F:\\filename.txt");
	wstring line;

	if (myfile.is_open())
	{
		while (! myfile.eof() )
		{
     			getline(myfile,line);
				wcout << line << endl;
 		}

    		myfile.close();
 	 }

	return 0;
}

Any ideas what's going wrong?
The first error message referes to line 16; it says

error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::ifstream'
1> c:\program files\microsoft visual studio 8\vc\include\string(528) : see declaration of 'std::getline'

But this doesn't help me in any ways..
Sorry I might be being stupid but I have just started using C/C++.

Thanks,
Anne

You might want to read this thread -- lots of good info about unicode files and how to read them.

Thanks a lot. I have been trying all sorts of code from the internet to convert unicode strings to ascii strings, but so far nothing works. Most of the stuff that I find online is pretty long, and impossible to understand for me as a beginner.

The following code should do it, but I get an error when compiling.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;

int main()
{
	wchar_t WideStr[] = L"Unicode!";
	char x[] = "longlongstring";
	wcstombs(&x, WideStr, 1024);
	return 0;
}

The error is

error C2664: 'wcstombs' : cannot convert parameter 1 from 'char (*__w64 )[15]' to 'char *'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>myCOnverter.cpp

Could someone tell me what that means, or how I can find out myself what the error is?
Thanks,
Anne

commented: On this forum we like people like you, because you are one of those who are willing to put some effort in it. BTW, Well done on the code tags so far :) +16

wcstombs - convert unicode to multibytes.

wcstombs(x, WideStr, 1024);

where did the "C++" forum go?

commented: Heh, Good question :) +16

if u can do some manual work then
1)Open your Unicode file with notepad and save as ANSI.
Then read that file it using C
or else
in DOS use
command:type filename > filename1
Then read the filename1 using C

-----------

If your want to develop a Unicode reading tool using C then
You can go by Ancient Dragon or adatapost.

Thanks,
DP

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.