Script to identify you Office Version and if affected.

Outlook replaces accented and extended characters with question marks

problem:

When you write extended characters in an email, you may find that they display as question marks.

image

https://support.microsoft.com/en-au/office/classic-outlook-replaces-accented-and-extended-characters-with-question-marks-c1fdb067-38ca-464a-bcb1-bd657a85e1d3

Some examples that we have seen reported include registered trademark (®), accented characters (é, ü, ñ, etc.), pound currency (£), umlauts (¨ over a letter), and other Non-ASCII Symbols.

From the feedback so far, this issue is occurring in Version 2601 (Build 19628.20150+).

19.02.2026 STATUS: INVESTIGATING

The Outlook Team is investigating this issue. We will update this topic as soon as we know more information.

WORKAROUND

Workaround #1

Use Outlook Web Access (OWA) or New Outlook

Workaround #2

If you urgently need to work in classic Outlook, you can revert to the prior version and verify if that addresses the issue.

To revert to the prior Version 2512 (Build 19530.20184).

Open a Command Prompt in Administrator context.

Type or paste the command below into the Command Prompt window and press Enter:

“%programfiles%\Common Files\Microsoft Shared\ClickToRun\officec2rclient.exe” /update user updatetoversion=16.0.19530.20184

To prevent Office updating back to the latest build, you can turn off updates by selecting File > Office Account > Update Options > Disable Updates.

Put a reminder on your calendar for March 10th to re-enable updates. Or check back on this Known Issue in case it is addressed sooner.

Workaround #3

Disable Outlook automatically selecting the encoding for outgoing messages

Select File > Options > Advanced.

Under International Options, uncheck Automatically select encoding for outgoing messages.

image

Put a reminder on your calendar for March 10th to re-enable this setting. Or check back on this Known Issue in case it is addressed sooner.

The script enumerates all Microsoft Office installations (Click-to-Run and MSI/Volume) and displays the following fields:

  • InstallType – Click-to-Run or MSI/Volume.
  • Version – official Office version (VersionToReport for Perpetual/Volume builds).
  • Build – client-reported build (ClientVersionToReport).
  • UpdateChannel – channel name (Monthly, SemiAnnual, etc.) or PerpetualVL / Volume.
  • Interval – human-readable update frequency (Monthly, 6-Month cycle, or manual).
  • InstallPath – installation folder path.
  • UmlautBugRisk – flags potential Outlook Umlaut/accents bug for builds older than 16.0.14326; otherwise No.

# ===============================
# V1.0, 19.02.2026, www.butsch.ch, for David and Gilles
# Script: Get-officeopdateinfo.ps1
# Purpose: List all Office installations with Version, Build, Channel, readable Update Interval
#          and flag potential Outlook Umlaut/accents bug
# Works for: Click-to-Run and MSI/Volume installs, including Perpetual/Volume builds
# ===============================

$paths = @(
    "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration",             
    "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration",  
    "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\InstallRoot",               
    "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Office\16.0\Common\InstallRoot"    
)

$results = @()

# Fixed version where the Umlaut bug was resolved
$fixedVersion = [version]"16.0.14326.0"

foreach ($path in $paths) {
    if (Test-Path $path) {
        $props = Get-ItemProperty -Path $path

        # Click-to-Run Office
        if ($props.PSObject.Properties.Name -contains "ClientVersionToReport") {

            if ($props.PSObject.Properties.Name -contains "ProductReleaseIds" -and
                $props.ProductReleaseIds -like "*Volume*") {

                $channel = "PerpetualVL / Volume"

                # Use VersionToReport if exists, else ClientVersionToReport
                $version = if ($props.PSObject.Properties.Name -contains "VersionToReport") {
                    $props.VersionToReport
                } else {
                    $props.ClientVersionToReport
                }

                $build = $props.ClientVersionToReport
                $interval = "No fixed cycle / Manual updates"

            } else {
                # Normal Click-to-Run with real channel
                $channel = $props.UpdateChannel
                $version = $props.DisplayVersion
                $build = $props.ClientVersionToReport

                switch ($channel) {
                    "Monthly"                { $interval = "Monthly" }
                    "Current"                { $interval = "Monthly" }
                    "MonthlyEnterprise"      { $interval = "Monthly (Enterprise-tested)" }
                    "SemiAnnual"             { $interval = "6-Month cycle (Jan/Jul)" }
                    "SemiAnnualTargeted"     { $interval = "6-Month cycle, early test (1 month early)" }
                    default                  { $interval = "Unknown" }
                }
            }

            # ---- Flag potential Umlaut bug ----
            # Only flag builds older than the fixed version
            $checkVersion = [version]$version
            if ($checkVersion -lt $fixedVersion) {
                $umlautBug = "BUG Umlaut = YES"
            } else {
                $umlautBug = "No"
            }

            $results += [PSCustomObject]@{
                InstallType    = "Click-to-Run"
                Version        = $version
                Build          = $build
                UpdateChannel  = $channel
                Interval       = $interval
                InstallPath    = $props.InstallationPath
                UmlautBugRisk  = $umlautBug
            }
        }

        # MSI / Volume Office
        elseif ($props.PSObject.Properties.Name -contains "Version") {

            $version = $props.Version
            $build = $null
            $channel = "Perpetual / Volume"
            $interval = "No fixed cycle / Manual updates"

            # Flag all MSI/Volume builds older than fixed version
            $checkVersion = if ($props.PSObject.Properties.Name -contains "Version") {
                [version]$props.Version
            } else {
                $fixedVersion  # default safe
            }

            $umlautBug = if ($checkVersion -lt $fixedVersion) { "BUG Umlaut = YES" } else { "No" }

            $results += [PSCustomObject]@{
                InstallType    = "MSI/Volume"
                Version        = $version
                Build          = $build
                UpdateChannel  = $channel
                Interval       = $interval
                InstallPath    = $props.Path
                UmlautBugRisk  = $umlautBug
            }
        }
    }
}

# Output results in a clean table
$results | Format-Table -AutoSize