Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Reading Turkish RSS Feed in Console with Turkish Fonts

0.00/5 (No votes)
14 Aug 2013 1  
This article has a usable software tool to read RSS feeds and it is especially designed to read and display Unicode characters inside a console window.

Introduction 

I wanted to read Turkish news inside a console devoid of all the pictures and flashy signs. Just text. I looked around and didn't find a tool that does this. This project puts together freely available code snippets for different parts of the project. If you downloaded the binary distribution, Please create a shortcut link of the exe file (MyCSrss.exeand change the font to LUCIDA CONSOLE to see the Unicode characters.

The Work Behind 

One of the surprising challenges was actually displaying Turkish Unicode fonts. The solution seems to be using the kernel32.dll API [1]. I move a set of functions into the Turkish.cs file, but all that's needed is one function:

This function can display Unicode characters inside a console window as long as the font property of the console is set to TrueType font, such as Lucida Console font.  I added into Turkish.cs all the special Turkish characters that are not in the regular ASCII using the ISO 8859-9 to Unicode document[2] :

Small Letters

Capital Letters

c_with_cedilla

C_with_cedilla

g_with_breve

G_with_breve

i_without_dot

I_with_dot

o_with_diaeresis

O_with_diaeresis

s_with_cedilla

S_with_cedilla

u_with_diaeresis

U_with_diaeresis

The font property of the console is changed by right-clicking the top-left corner of the console window and selecting "Properties", and then the "Font" tab: 

It is possible to add more fonts to the console as long as they are fixed-width fonts [3].  But Lucida is perfectly fine to display all of the Turkish letters:

Code that created the above is:

Reading RSS Feed 

Microsoft's System.Net[4] and System.Xml.Linq[5] are easy to use libraries to read an RSS XML page and parse, respectively.

I wrapped relevant static functions inside the RSS class, which is in the RSS.cs file.  RSS class has one public method:

Where rss_sites is an array of strings that are URL addresses for the RSS feeds. It should be noted that when using an HttpWebRequest object, setting its Proxy to null makes it much faster[6].

Sometimes the "description" element in the RSS feed is cluttered with other XML elements I am not interested in. To strip away these StripTagsCharArray[7] function is used.

Putting It All Together 

I don't like the way the system automatically positions the console window. I adjusted the specifications to my liking by right-clicking on the top-left corner of the console window and selecting properties, and then selecting 'Layout':

Running the app returns with a list of Turkish economic news from a Turkish newspaper[8].  This overwhelmed the console window, so I limited the output to 10 news line using a constant MAX_NEWS inside RSS.cs. If you press return enough many times you will then see CNN World News[9].

I tried to make program.cs as simple as possible: 

What it returns is what I was hoping to find before I started working on it:

 

When I tried to test the release version of the exe in a clean environment, it quickly became evident how annoying it would be for the user to manually go and change the console properties.  How do you change the console font automatically? This question was asked and a worthy attempt was made to  answer it using undocumented kernel32 calls [11].  So I incorporated interesting function prototypes  into this project, but ultimately didn't use them because they didn't really do what I wanted. There is also a way to change the console's font using the registry, but I don't like this solution.

Earlier I had tried to use a shortcut link and change the font from there using the environment variable %CD%[10], but the shortcut property for the working directory wouldn't accept it. I tried scripting to a create [12] shortcut link but the API doesn't seem to support changing the font. That is why I couldn't include a shortcut link in this package.  If you wish to keep the Lucida font setting in your console, create a shortcut link and change the font to Lucida in its properties. Then each time you double click the shortcut, instead of the main MyCSrss.exe, you will see the Turkish fonts.

References 

[1]: http://blogs.msdn.com/b/michkap/archive/2010/04/07/9989346.aspx

Aug. 9, 2013

[2]: ftp://ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-9.TXT

Aug. 9, 2013

[3]: http://www.howtogeek.com/howto/windows-vista/stupid-geek-tricks-enable-more-fonts-for-the-windows-command-prompt/

Aug. 10, 2013

[4]: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

Aug. 10, 2013

[5]: http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx

Aug. 10, 2013

[6]: http://stackoverflow.com/questions/1119347/how-to-perform-a-fast-web-request-in-c-sharp

Aug. 10, 2013

[7]: http://www.dotnetperls.com/remove-html-tags

Aug. 9, 2013

[8]: http://rss.hurriyet.com.tr/rss.aspx?sectionId=4

Aug. 10, 2013

[9]: http://rss.cnn.com/rss/cnn_world.rss

Aug. 10, 2013

[10]: http://libertyboy.free.fr/computing/reference/envariables/

Aug. 10, 2013

[11]: http://blogs.microsoft.co.il/blogs/pavely/archive/2009/07/23/changing-console-fonts.aspx

Aug.10, 2013

[12]: http://support.microsoft.com/kb/244677

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here