Difficulty loading proper characters from a .txt file
Jul 26, 2010 at 8:09pm UTC
I'm creating a small text based game and I would like to make level creation easier by simply being able to type the characters used to build the level into a notepad.txt file. When I have my program load the text from the file though I get different character codes then what I used in the text file. For example:
This is the zone01.txt file data:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
≈≈≈≈ /X( )\ /≈≈≈≈≈
__≈___ \( )│/X≈≈≈≈≈
/XX░XXX\ │(/\ /\)//X≈≈≈≈≈≈
│ ░≈≈≈X│ __ /♠♠ / \ XX≈≈≈≈≈≈≈
│ ≈≈≈≈≈≈│ /XX\_/X♠♠♠♠║♠♠♠♠♠♠♠♠≈≈≈≈
│ ≈≈≈≈≈\____/XX▲XXX♠♠ ♠♠║♠♠♠ ♠♠♠ ≈≈≈≈
\ ╗♠♠XXXXXX ║♠♠♠♠ ♠♠║♠♠ ♠♠ ≈≈≈≈≈
\__♠╚╗♠♠♠ ♠♠♠║♠♠♠♠ ♠♠♠║ ♠♠ ≈≈≈≈≈≈
│♠╚═╦══════╩════════╣♠♠♠♠ ≈≈≈≈≈≈≈
│♠♠♠║♠ ♠♠♠♠♠♠♠♠♠♠♠♠♠║♠♠♠♠♠ ≈≈≈≈≈≈
/♠♠ ║♠ ♠♠♠♠ ♠♠♠♠♠║♠♠♠ ≈≈≈≈≈≈
___/♠♠♠♠♠║♠♠♠♠♠♠♠♠♠ ♠♠♠♠♠║♠♠♠♠ ≈≈≈≈≈≈≈
XXXX ♠♠♠║ ♠♠♠♠♠╔════════╝ ♠ ≈≈≈≈≈≈≈
═══╦═════╩══════╝♠♠♠ ♠♠♠♠♠♠♠ ≈≈≈≈≈≈≈≈
♠ ║ ♠♠♠♠♠♠♠♠♠♠♠♠♠♠ ≈≈≈≈≈≈≈≈≈≈
┌──╨─┐♠♠♠♠♠♠♠♠♠♠♠♠ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
│TOWN│♠♠♠♠♠♠♠♠♠ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
└────┘♠♠ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
♠♠♠♠♠♠♠ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
♠♠♠♠♠♠≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
here is the main.cpp file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
#include <iostream>
#include <string>
#include <fstream>
int main()
{
std::string fileName = "zone01.txt" ;
std::string strData = "" ;
int x = 0;
std::ifstream zoneFile(fileName);
while (!zoneFile.eof())
{
strData = "" ;
strData = zoneFile.get();
std::cout << strData;
if (x == 38)
{
std::cout << std::endl;
x = 0;
}
x++;
}
return 0;
}
and this is what displays:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
≈≈≈≈ /X(
)\ /ΓëêΓëêΓëêΓëêΓëê
__Γëê___
\( )Γöé/XΓëêΓëêΓëêΓëêΓëê
/X
XΓûæXXX\ Γöé(/\ /\)//XΓëêΓ
ëêΓëêΓëêΓëêΓëê
Γöé ΓûæΓëêΓëêΓëêXΓöé
__ /ΓÖáΓÖá / \ XXΓëêΓëêΓëêΓëêΓë
êΓëêΓëê
Γöé ΓëêΓëêΓëêΓëêΓëêΓëêΓöé
/XX\_/XΓÖáΓÖáΓÖáΓÖáΓòæΓÖáΓÖáΓÖáΓÖáΓÖáΓ
ÖáΓÖáΓÖáΓëêΓëêΓëêΓëê
Γöé ΓëêΓëêΓëêΓëê
Γëê\____/XXΓûXXXΓÖáΓÖá ΓÖáΓÖáΓòæΓÖáΓÖ
áΓÖá ΓÖáΓÖáΓÖá ΓëêΓëêΓëêΓëê
\ ΓòùΓ
ÖáΓÖáXXXXXX ΓòæΓÖáΓÖáΓÖáΓÖá ΓÖáΓÖáΓòæ
ΓÖáΓÖá ΓÖáΓÖá ΓëêΓëêΓëêΓëêΓëê
\__ΓÖ
áΓòÜΓòùΓÖáΓÖáΓÖá ΓÖáΓÖáΓÖáΓòæΓÖáΓÖáΓÖ
áΓÖá ΓÖáΓÖáΓÖáΓòæ ΓÖáΓÖá ΓëêΓëêΓëêΓë
êΓëêΓëê
ΓöéΓÖáΓòÜΓòÉΓòªΓòÉΓòÉΓòÉΓ
òÉΓòÉΓòÉΓò⌐ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòú
ΓÖáΓÖáΓÖáΓÖá ΓëêΓëêΓëêΓëêΓëêΓëêΓëê
ΓöéΓÖáΓÖáΓÖáΓòæΓÖá ΓÖáΓÖáΓÖáΓÖáΓÖáΓÖ
áΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓòæΓÖáΓÖáΓÖáΓÖáΓ
Öá ΓëêΓëêΓëêΓëêΓëêΓëê
/ΓÖáΓÖá Γòæ
ΓÖá ΓÖáΓÖáΓÖáΓÖá ΓÖáΓÖáΓÖáΓÖáΓÖáΓòæ
ΓÖáΓÖáΓÖá ΓëêΓëêΓëêΓëêΓëêΓëê
___/ΓÖá
ΓÖáΓÖáΓÖáΓÖáΓòæΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖ
áΓÖá ΓÖáΓÖáΓÖáΓÖáΓÖáΓòæΓÖáΓÖáΓÖáΓÖá Γë
êΓëêΓëêΓëêΓëêΓëêΓëê
XXXX ΓÖáΓÖáΓÖáΓòæ
ΓÖáΓÖáΓÖáΓÖáΓÖáΓòöΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓ
òÉΓòÉΓò¥ ΓÖá ΓëêΓëêΓëêΓëêΓëêΓëêΓëê
Γ
òÉΓòÉΓòÉΓòªΓòÉΓòÉΓòÉΓòÉΓòÉΓò⌐ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉΓò¥ΓÖáΓÖáΓÖá ΓÖáΓÖáΓÖáΓÖáΓÖá
ΓÖáΓÖá ΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëê
ΓÖá Γ
òæ ΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖ
áΓÖáΓÖá ΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓ
ëêΓëêΓëê
ΓöîΓöÇΓöÇΓò¿ΓöÇΓöÉΓÖáΓÖáΓÖáΓÖ
áΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖá ΓëêΓëêΓë
êΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëê
ΓöéTOWNΓöéΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖáΓÖá
ΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓë
êΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëê
ΓööΓöÇΓöÇ
ΓöÇΓöÇΓöÿΓÖáΓÖá ΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓ
ëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëê
ΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëê
ΓÖáΓÖáΓÖáΓ
ÖáΓÖáΓÖáΓÖá ΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓë
êΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓ
ëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëê
ΓÖáΓÖáΓÖáΓÖ
áΓÖáΓÖáΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓ
ëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëê
ΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëêΓëê
Press any key to continue . . .
as you can see, the normal characters such as 'X', '\', 'TOWN' display correctly but the other characters do not. Im assuming it has something to do with the way the character codes are encoded. I have the zone01.txt file saved with UTF-8 encoding. Any help to be able to load and display the proper characters from the .txt file would be great. Thanks!
Jul 27, 2010 at 3:42am UTC
When the file is saved with Unicode encoding instead of UTF-8, the program displays this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
■H"H" H"H" / X ( ) \ / H"H" H"H" H"
_ _ H" _ _ _ \ ( ) ☻%/ X H"H" H"H" H"
/ X X æ%X X X \ ☻%( / \ / \ ) / / X H" H"H" H"H" H"
☻% æ%H" H"H" X ☻% _ _ / `&`& / \ X X H"H" H"H" H"H" H"
☻% H" H"H" H"H" H"☻% / X X \ _ / X `&`&`&`&Q%`&`&`&`&`&`&`&`&H" H"H" H"
☻% H" H"H" H"H" \ _ _ _ _ / X X ▓%X X X `&`& `&`&Q%`&`&`& `&`&`& H"H" H"H"
\ W%`&`&X X X X X X Q%`&`&`&`& `&`&Q%`&`& `&`& H"H" H"H" H"
\ _ _ `&Z%W%`&`&`& `&`&`&Q%`&`&`&`& `&`&`&Q% `&`& H" H"H" H"H" H"
☻%`&Z%P%f%P%P%P%P%P%P%i%P%P%P%P%P%P%P%P%c%`&`&`&`& H" H"H" H"H" H"H"
☻%`&`&`&Q%`& `&`&`&`&`&`&`&`&`&`&`&`&`&Q%`&`&`&`&`& H"H" H"H" H"H"
/ `&`& Q%`& `&`&`&`& `&`&`&`&`&Q%`&`&`& H"H" H"H" H"H"
_ _ _ / `&`&`&`&`&Q%`&`&`&`&`&`&`&`&`& `&`&`&`&`&Q%`&`&`&`& H"H" H"H" H"H" H"
X X X X `&`&`&Q% `&`&`&`&`&T%P%P%P%P%P%P%P%P%]% `& H" H"H" H"H" H"H"
P%P%P%f%P%P%P%P%P%i%P%P%P%P%P%P%]%`&`&`& `&`&`&`&`&`&`& H"H" H"H" H"H" H"H"
`& Q% `&`&`&`&`&`&`&`&`&`&`&`&`&`& H"H" H"H" H"H" H"H" H"H"
♀% % %h% %►%`&`&`&`&`&`&`&`&`&`&`&`& H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"
☻%T O W N ☻%`&`&`&`&`&`&`&`&`& H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"
¶% % % % %↑%`&`& H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H"
`&`&`&`&`&`&`& H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H"
`&`&`&`&`&`&H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H" H"H"
Ω ô♥δ Press any key to continue . . .
Conversion from Unicode to Ascii is what Im looking for I think. If anywhone knows how please let me know.
Jul 27, 2010 at 3:50am UTC
Um, you can't. The point of Unicode is to support more characters than ASCII.
Jul 27, 2010 at 4:19am UTC
You should take a look at wifstream and wcout.
Edit: or maybe not. getline always fails for me when using wifstream/wcout/wstring.
This however works fine and prints the file correctly (tested in gnome-terminal, xterm and Konsole):
1 2 3 4 5 6 7 8 9 10 11 12
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream file("/home/david/zone01.txt" );
if (!file.is_open())return 1;
string line;
while (getline(file,line))cout << line << endl;
}
Last edited on Jul 27, 2010 at 4:38am UTC
Jul 27, 2010 at 4:29am UTC
I cut and pasted it into Code::Blocks and I got a strange error. std::ifstream wouldn't accept 'fileName' for the file name. After I replaced 'fileName' with "zone01.txt", it almost worked fine. When I ran it from Code::Blocks it went into an endless loop of '0's, but when I ran it from the console it worked. I used gedit for the text editor to save 'zone01.txt'.
Topic archived. No new replies allowed.