ovanes ovanes - 4 months ago 45
LaTeX Question

Visual Studio C# disable unicode or utf-8 as file encoding and use ASCII instead

I am currently working on some LaTeX document which embeds C# files generated by Visual Studio 2008. My problem is that these files are encoded in UTF-8 with BOM. This causes LaTeX to produce output similar to the output described in this post:

Invalid characters in generated latex sources in Doxygen?

I know that I can use a tool like Notepad++ to convert the file to ASCII or some other format without BOM. But my intention would be to:


  • either cause LaTeX to use correct input encoding (until now I failed doing it with the package imports like:

    \usepackage{ucs} % unicode functionality

    \usepackage[latin1]{inputenc}

  • or cause Visual Studio to save the files without BOM or in plain ASCII



Otherwise I might edit the file (compile it and save it in VC#) and unintentionally introduce BOM again, which would break the code listing in the document.

Many thanks,

Ovanes

Answer

Visual Studio does not have this option, by design I believe, because .NET is built from the ground-up to use Unicode.

However, I don't believe Visual Studio is supposed to use the byte order marks. You said that Visual Studio is "generating" these files, but what process is really creating them? Is it the result of some sort of code generation tool? If so, that's the culprit and the place where you should focus.

I checked several of my code files and none of them contain the byte order marks.

EDIT: Changing Visual Studio Project Templates

In the comments the questioner said that these files were generated by the built-in Console Application project template. These are stored on your hard drive and can be modified if necessary.

Your installation path may vary, but on my system, I navigated to this directory:

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Windows\1033

Here I find ConsoleApplication.zip. I copied this to my desktop (for safety) and unzipped, and inside you find 4 files - a .vstemplate file, and the 3 files that are created by the project: AssemblyInfo.cs, ConsoleApplication.csproj, and Program.cs.

If you want, you can edit these files to remove the byte order marks, zip it back up, and replace the file in the source directory.

OR, to be safer, you can change the name of the template to "Console Project - No BOM" or something like that. In the .vstemplate file, there is a Name attribute that uses a Package attribute to call in information from somewhere by a guid. You can replace this name line with a simple line that specifies the name.

<Name>Console Application - No BOM</Name>

Then rezip the files, and put the zip file in the following path:

(My Documents)\Visual Studio 2008\Templates\ProjectTemplates\Visual C#

New projects created from this template should not contain the byte order marks, but remember, Microsoft apparently wanted those byte order marks in there, so your mileage may vary.

Item templates (like Class) can be modified in the same way - it shouldn't take too much exploring to find the default and user ItemTemplates directory.