The new RDA format for MARC21 uses the copyright symbol in place of the letter c in the 260 tag. This leads to an interesting problem with MARC21 files when it comes to including special characters because the actual encoding is generally MARC8 which is not supported by .Net rather than UTF-8/Unicode which .Net does support. Generally special characters aren't a huge problem, unless you are working with a lot of large collections full of foreign books, which is something I have never had to deal with before. The copyright symbol is, however, a problem that I needed to solve in order to make sure my class structures do support RDA. Since most of the people I build records for expect them to be encoded in MARC8 rather than UTF-8, I had to make sure that these files were being written and read correctly. If you want to read more about the problem in particular, check out Mark Sullivan's blog. Mark is the developer of another set of class structures, and has taken a slightly different approach than I have. His blog post does a wonderful job of explaining the problem in detail, and talking about how to fix it. While my solution isn't as fully featured as the MARC8 support in Mark's SobekCM MARC Library, it does support writing files back out in MARC8 rather than fully converting them to UTF-8.
The latest version of CSharp_MARC, released today, has a new class: FileMARCWriter. Not only does this make writing records out to files easier, but it also has the benefit of supporting a select number of special characters. Currently the only characters supported are the visible characters in the A-C rows of the ANSEL MARC8 encoding. More will be coming soon, as it will take some time to add the full MARC8 character set.
Here's a quick example of the new FileMARCWriter's use:
List<Record> records = new List<Record>(); //Fill your list of records just like you always have FileMARCWriter writer = new FileMARCWriter(filename); foreach (Record marc in records) { //modify each record as you normally would writer.Write(record); } writer.WriteEnd(); //Write the end of file (Hex 1A) character writer.Dispose();





