Index: src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java
===================================================================
--- src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java	(revision 19438)
+++ src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java	(working copy)
@@ -73,7 +73,7 @@
                                         Long.toString(osmPrimitive.getId())
                                 )
                         );
-                        osmPrimitive.put(key, Utils.shortenString(value, Tagged.MAX_TAG_LENGTH));
+                        osmPrimitive.put(key, Utils.reduceCodePoints(value, Tagged.MAX_TAG_LENGTH));
                         continue;
                     }
                     JOptionPane.showMessageDialog(MainApplication.getMainFrame(),
@@ -106,4 +106,5 @@
         }
         return true;
     }
+
 }
Index: src/org/openstreetmap/josm/tools/Utils.java
===================================================================
--- src/org/openstreetmap/josm/tools/Utils.java	(revision 19438)
+++ src/org/openstreetmap/josm/tools/Utils.java	(working copy)
@@ -2049,4 +2049,24 @@
     public static boolean checkCodePointCount(String s, int maxLen) {
         return getCodePointCount(s) <= maxLen;
     }
+
+    /**
+     * Truncate a string to the given maximum number of code points.
+     * @param s the string
+     * @param num the maximum number of code points
+     * @return s if it is null or the number of code points is within the given limit, else a string with the first {@code num}
+     * code points
+     * @since xxx
+     */
+    public static String reduceCodePoints(String s, int num) {
+        if (checkCodePointCount(s, num))
+            return s;
+        String[] parts = s.split("\\b{g}"); // split along grapheme cluster boundaries
+        StringBuilder shorter = new StringBuilder();
+        for (int i = 0; i < num; i++) {
+            shorter.append(parts[i]);
+        }
+        return shorter.toString();
+    }
+
 }
