From 651b886a2e167526d7a5e1a4bf504ab12fac73fb Mon Sep 17 00:00:00 2001 From: mdoube Date: Fri, 11 Sep 2026 10:39:08 +0200 Subject: [PATCH] =?UTF-8?q?Handle=20some=20variants=20of=20the=20micro=20s?= =?UTF-8?q?ign=20=C2=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In case the µ turns up as a single character not a Unicode identity. Handle both Greek mu and micro sign. --- .../net/imagej/units/DefaultUnitService.java | 9 +++++++- .../imagej/units/DefaultUnitServiceTest.java | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/imagej/units/DefaultUnitService.java b/src/main/java/net/imagej/units/DefaultUnitService.java index 527938b8..0e320e15 100644 --- a/src/main/java/net/imagej/units/DefaultUnitService.java +++ b/src/main/java/net/imagej/units/DefaultUnitService.java @@ -155,7 +155,14 @@ private boolean definedInternally(String unitName) { */ private String sanitizeUnitString(final String unitName) { // Convert the mu symbol into "u". - return unitName.replace("\\u00B5", "u").replace("\\u00b5", "u"); + return unitName.replace("\\u00B5", "u") + .replace("\\u00b5", "u") + //micro sign + .replace("µ", "u") + .replace("\\u03BC", "u") + .replace("\\u03bC", "u") + //Greek mu + .replace("μ", "u"); } private Unit parseUnit(final String unitName) { diff --git a/src/test/java/net/imagej/units/DefaultUnitServiceTest.java b/src/test/java/net/imagej/units/DefaultUnitServiceTest.java index b17a2b85..a0cdedf8 100644 --- a/src/test/java/net/imagej/units/DefaultUnitServiceTest.java +++ b/src/test/java/net/imagej/units/DefaultUnitServiceTest.java @@ -88,10 +88,31 @@ public void testBadConversion() { @Test public void testMu() { final DefaultUnitService c = new DefaultUnitService(); + //sanity - u is used by the rest of the conversion logic + assertEquals(0.1, c.value(100_000, "um", "meter"), 1e-16); + assertEquals(1_000_000.0, c.value(1, "meter", "um"), 0.0); + + //micro sign assertEquals(0.1, c.value(100_000, "\\u00B5m", "meter"), 1e-16); assertEquals(1_000_000.0, c.value(1, "meter", "\\u00B5m"), 0.0); assertEquals(0.1, c.value(100_000, "\\u00b5m", "meter"), 1e-16); assertEquals(1_000_000.0, c.value(1, "meter", "\\u00b5m"), 0.0); + + //Greek small mu + assertEquals(0.1, c.value(100_000, "\\u03BCm", "meter"), 1e-16); + assertEquals(1_000_000.0, c.value(1, "meter", "\\u00b5m"), 0.0); + + assertEquals(0.1, c.value(100_000, "\\u03bCm", "meter"), 1e-16); + assertEquals(1_000_000.0, c.value(1, "meter", "\\u00b5m"), 0.0); + + //Unicode µ \\u00B5 micro sign + assertEquals(0.1, c.value(100_000, "µm", "meter"), 1e-16); + assertEquals(1_000_000.0, c.value(1, "meter", "µm"), 0.0); + + //Unicode μ \\u03bc Greek small letter mu + assertEquals(0.1, c.value(100_000, "μm", "meter"), 1e-16); + assertEquals(1_000_000.0, c.value(1, "meter", "μm"), 0.0); + } }