The peculiar history of the Windows Character Map

Windows is an old and complex operating system. It’s been around for a very long time, and while it’s been continuously updated and altered, and parts are removed or replaced all the time, the operating system still houses quite a few tools, utilities, and assets that haven’t been updated or replaced in a long, long time. Most of these are hidden in deep nooks and crannies, and you rarely encounter them, unless you start hunting for them.

Most. But not all.

There’s one utility that I need to use quite often that, seemingly, hasn’t been updated – at least, not considerably – since at least Windows 95, or possibly even Windows 3.x. Using this utility is an exercise in pure frustration, riddled as it is with terrible user interface design and behaviour that never should have shipped as part of any serious software product.

This is the story of the dreaded Character Map. I’ll first explain just how bad it really is, after which I’ll dive into the little application’s history, to try and find out why, exactly, it is as bad as it is. It turns out that the Character Map – or charmap.exe – seems to exist in a sort-of Windows build limbo, and has been stuck there since the days Microsoft scrapped Longhorn, and started over.

Down charmap.exe’s rabbit hole

Even though most of you will know what the Character Map is, I’ll give a short introduction anyway. The Character Map is, quite literally, a map of just about any special character you could ever possibly want to use, from basic Latin characters, to common symbols such as the dollar sign or ampersand, all the way to rare mathematical and scientific symbols. It also gives you access to characters from other, non-Latin alphabets and languages, such as Hebrew.

As a translator, I work with all kinds of documents, often filled with special characters, symbols, and sometimes even non-Latin script, even though I don’t translate from languages using them. This has given me a deep hatred for the Character Map in Windows, and here’s why.

The Character Map in Windows 8.1.

The utility’s main window looks normal enough, but it isn’t until you actually start using it that you notice the many, many flaws in the program. First and foremost, you will most likely try to use your scroll wheel or touchpad to scroll through the long grid of characters. However, this is not possible. Even if you click inside the grid to activate it, it simply does not accept scroll wheel input. Instead, the font dropdown menu at the top of the window always has scroll focus. To this day, even after countless years of using the Character Map, I still instinctively start scrolling with my scroll wheel, only to have it jump from font to font.

The utility’s search function is also something from a bygone era. Apparently, searching for a character is something that’s too difficult for ordinary users, so the search function is hidden behind an “advanced view” checkbox. Searching is so very advanced.

You’d think that in 2015, it would have instant search or autocomplete. It doesn’t. You have to enter a search query, hope it’s the right one, and press enter – only then will it search. This means that if you want to find a character, you’ll need to know its exact name – the name Unicode’s developers decided to use – otherwise you won’t find it. Thus, I learned that Unicode refers to â„¢ as the “trade mark sign” instead of “trademark sign”.

Once you’ve finally managed to find your character or symbol, you’ll have to fight the Character Map to actually get your character of choice into your document. The first thing you’ll probably try is to select the character, press ctrl+c, switch to your document or input field, and press ctrl+v. This doesn’t work. For reasons unknown, you first need to transfer the character to an input field at the bottom of the Character Map, and only then can you copy and paste it. You can do this by double-clicking the character, or by pressing select next to the input field. You then need to select the character inside the input field and copy it (either by keyboard shortcut or by pressing copy).

Since this is 2015, instead of using keyboard shortcuts, you may have considered using dragging and dropping. While drag and drop does work, it has a peculiarity in that you can’t just click on a character and start dragging right away; if you do this, you will actually start scrolling through the list of characters (kind of like dragging in Google Maps). In order to drag, you first need to select the character, release the mouse button, and then click on the character again and start dragging.

I can’t even begin to understand the reasoning behind this… Modal dragging? I don’t even know what to call it.

If you happen to need a set of characters or symbols regularly, you’ll have to perform the search every single time, since Character Map does not have a list of recently used characters or user-defined favourites. There’s no logical grouping either, making it even harder to find what you’re looking for if you don’t know the Unicode name.

There are so many more problems. There are small issues, like the spaces before colons in the user interface or all the UI elements being misaligned. There are also bigger problems, like the help button loading an empty Windows Help window that reads “this content is no longer available” or that the window can’t be resized.

It’s dreadful. In fact, it’s so bad I just use Google and Wikipedia to find characters and symbols. It works, but it’s cumbersome. There has to be a better way – and there is, but we’ll get to that later. First, let’s take a look at where it seems to have gone wrong.

Pinpointing where it went wrong

Having established just how horrible Character Map is, the question arises why this is the case. Developer Steven Troughton-Smith, who has virtual machines at the ready for pretty much every Windows release – final or beta – and I dove into the history of the Character Map, to find out how it has evolved over the years. We discovered something quite remarkable.

Character Map has a long history. It started its life in Windows 3.11, with version number 3.10.

charmap.exe’s version/build number in Windows 3.11.

With the move to Windows 95, the user interface got a minor touch-up, but functionally, it’s the same. The version number got bumped to 4.0 (same for Windows NT 4.0), while Windows 98 has 4.10. Windows ME, meanwhile, has version number 4.90, and Windows 2000 – the first NT-based consumer Windows release – bumps it up to 5.0.2134.

charmap.exe’s version/build number in Windows ME.

charmap.exe’s version/build number in Windows 2000.

With the release of Windows XP, the Character Map got its last update: the search function was added, and its version number was bumped to 5.1.2600.

charmap.exe’s version/build number in Windows XP.

There’s a pattern here that Windows aficionados surely have picked up on already: the version numbers for Character Map match the internal Windows version number. The four-digit part of the version numbers for 2000 and XP should match the Windows build number – and for Windows XP, it does (Windows XP was build 2600). Weirdly enough, the build number for Windows 2000 does not match; Windows 2000 is build 2195, while Character Map lists itself as 2134. This puts the Windows 2000 build somewhere between Windows 2000 Beta 3 RC2 (2128) and Windows 2000 Beta 3 (2183).

This pattern seems to apply to most Windows utilities – if you look at Sound Recorder, for instance, you’ll see it follows the same pattern (sidenote: the Windows 2000 build of Sound Recorder does sport the right build number). This makes sense: these are core Windows utilities that are part of the regular Windows build process, and as such, they get the same build number (mostly, as the peculiar exception of the Windows 2000 build of Character Map indicates) and version number, regardless of actual changes to the application and its code.

That being said, you can guess what version number the charmap.exe has in Windows 8.1, right? It should be version 6.3.9600. You’ll be surprised to learn that… No, it actually has a completely different version number: 5.2.3668. This is quite peculiar, since Windows 5.2 is more widely known as Windows Server 2003 (build number 3790). The build number 3668 puts it right between Windows .NET Server Release Candidate 1 (3660) and Windows .NET Server 2003 RC2 (3718). Other utilities do have Windows 8’s version and build numbers – Sound Recorder or Calculator match up nicely with version and build numbers of 6.3.9600.

charmap.exe’s version/build number in Windows 8.1.

What’s going on here? Why did the Character Map suddenly break out of formation? Steven and I developed a theory (well, he did, mostly): we think it’s got to do with Longhorn.

Way back in august 2004, Microsoft announced it was scrapping what was known as Longhorn, to start afresh with a Windows Server 2003 codebase. This would eventually become Windows Vista, the release that, while troubled in its early days, would lay the foundations for a grand modernisation of the Windows NT platform. We theorised that somewhere during that Longhorn Reset, Character Map fell between the cracks.

To test this theory, Steven booted a virtual machine running Longhorn build 4074 (dated May 2004) to check the version and build numbers for the Character Map in Longhorn. Our theory gained some footing: it has version number 6.0.4074.

charmap.exe’s version/build number in Windows Longhorn.

To further confirm our theory, we had to check the first Windows release after the Longhorn Reset. Lo and behold, the Character Map in Windows Vista has version number 5.2.3668 – the exact same Server 2003-era version/build number in Windows 8.1. In the currently available build of Windows 10, build 10130, it also, still, has version number 5.2.3668.

charmap.exe’s version/build number in Windows Vista.

There are several possible theories that could explain what’s going on here. First, it could be that charmap.exe is part of the regular Windows build process, but that some bug prevents the version/build metadata from being updated – a bug Microsoft is unaware of or doesn’t care enough about to fix.

Two, it might be that build/version numbers for applications only change if their codebase has actually been altered; this would imply that the last change to charmap.exe took place between the two mentioned Server 2003 pre-releases. Any possible changes that caused the version/build number to match Windows’ in Longhorn would have been reverted and disregarded as part of the Longhorn Reset. Coincidentally, this could also explain the irregular build number charmap.exe has in Windows 2000.

The third and last theory is the one I like the most. It could be that during the Longhorn Reset, Microsoft recognised what a pile of crap Character Map really was, and drew up plans to replace it with something new for Vista, and as such, excluded charmap.exe from the regular Windows build process, assuming it’d soon be replaced by something new. However, since these were probably quite tumultuous times inside Microsoft, something, somewhere, went wrong – maybe some people got reassigned, some code got lost, whatever – and the intended replacement never arrived, leading to the situation we have now. Again, Microsoft may simply not even be aware of what’s going on here.

In any event, it’s 2015 now, and even the upcoming Windows 10 is still saddled with a Windows 3.x-era Character Map with a rudimentary search function bolted on. Whatever the cause, this is entirely inexcusable, and needs to be addressed. For Windows 10, I deeply, deeply hope that Microsoft will give us a modern, universal version of the Character Map.

All they need to do, is make an identical copy of the wonderful, delightful, lovable, delicious, exquisite, romantic, tasteful, elegant, and perfectly perfect Character Viewer in OS X. Okay, I’ll grant my perception of it is coloured somewhat by my horrible experiences with the Windows Character Map, but just look at it – it’s got instant search, logical grouping, recently used list, favourites, access to emoji, and it’s easily invokable from both the menubar and by pressing ctrl+cmd+space while in any text input field.

Perfection, I have laid my eyes upon thee.

Microsoft, you’ve got work to do.


  1. 2015-06-17 1:59 pm
  2. 2015-06-17 2:25 pm
    • 2015-06-17 2:38 pm
  3. 2015-06-17 2:40 pm
  4. 2015-06-17 3:01 pm
  5. 2015-06-17 3:52 pm
    • 2015-06-18 9:42 am
  6. 2015-06-17 7:29 pm
    • 2015-06-17 7:47 pm
      • 2015-06-17 10:04 pm
        • 2015-06-17 10:11 pm
          • 2015-06-17 10:16 pm
        • 2015-06-18 12:11 am
          • 2015-06-18 1:00 pm
          • 2015-06-20 1:43 am
        • 2015-06-19 1:26 pm
          • 2015-06-19 7:26 pm
  7. 2015-06-17 10:30 pm
  8. 2015-06-17 10:52 pm
    • 2015-06-17 11:07 pm
  9. 2015-06-17 10:58 pm
  10. 2015-06-17 11:56 pm
  11. 2015-06-18 1:33 am
    • 2015-06-18 6:50 am
    • 2015-06-18 2:33 pm
    • 2015-06-20 7:47 pm
  12. 2015-06-18 7:13 am
  13. 2015-06-18 12:24 pm
  14. 2015-06-20 11:16 am