14 ms·
The ü/ü Conundrum
- layer8 2y agoThe more general solution is specified here: https://unicode.org/reports/tr10/#Searching https://unicode.org/reports/tr10/#Searching
- bawolff 2y agoCollation and normal forms are totally different things with different purposes and goals. Edit: reread the article. My comment is silly. UCA is the correct solution to the author's problem.
- kazinator 2y agoOh that Mötley Ünicöde.
- lxgr 2y agoI'm aware of the "metal umlaut" meme, but as a German native speaker, I can't not read these in my head in a way that sounds much less Metal than probably intended :)
- deleted 2y ago[deleted]
- 082349872349872 2y ago> "When we finally went to Germany, the crowds were chanting, ‘Mutley Cruh! Mutley Cruh!’ We couldn’t figure out why the fuck they were doing that." —VNW
- ginko 2y agoI will always pronounce the umlaut in Motörhead. Lemmy brought that on himself.
- ooterness 2y agoThe best metal umlauts are placed on a consonant (e.g., Spın̈al Tap). This makes it completely clear when it's there for aesthetics and not pronunciation.
- yxhuvud 2y agoYes, those umlauts made it sound more like a fake french accent.
- Symbiote 2y agoYears ago, an American metalhead was added to a group chat before she came to visit. She was called Daniela, but she'd written it "Däniëlä". When my Swedish friend met her in person, havin seen her name in the group chat, he said something like "Hej, Dayne-ee-lair right? How was the flight?".
- 082349872349872 2y agoIt can encode Spın̈al Tap, so it's all good.
- chuckadams 2y agoOh sweet summer child, i̶̯͖̩̦̯͉͈͎͛̇͗̌͆̓̉̿̇̚͜͝͠ͅt̶̥̳͙̺̀͊͐͘ ̷̧͉̲̩̩̠̥̀̍̔͝c̸̢̛̙̦͙̠̱̖̠͆̆̄̈́͋͘ą̴̩̪̻̭̐́̒n̶̡̛̛̳̗̦͚̙̖͓̝̻̓̔̎̎̅̒͊ͅ ̵̰̞̰̺̠̲̯̤̠̹̯̩͚̥̗͌̓e̴̪̯̠͙̩̝͓̎́̋̈́̂̓̏̈͗͛̓̀̾͗͘n̶͕̗̣͙̺̰̠͐́͆̀́̌͑̔̊̚ĉ̴̗͔̼̦̟̰͐̌̂̅͋̄̄͘̕̚o̵̧͙̤͔̻̞̝̯̱̰̤̻̠̝̎͐̈́̈̐͆͑̃̀̏̂͝͠͝d̸͕̼̀̐̚ế̴̢̢̡̳͇̪̤͇͉̳̟̈̈̈́̎̀̋͆͊̃̓͛̈́͘ ̷̞̞̜̖͇̱̞͔̈́͋̈́̃̎̇̈͜͝ͅs̷̢̡͚͉͚̬̙̼̾̅̀̊̈́̏̇͘͜ö̸̥̠̲̞̪̦͚̞̝̦́̃̈́́̊͐̾̏̂͂̓̋͋̚͠ ̶̞̺̯̖͓̞͇̳͈̗͖̗̫̍̌̋̈͗̉͝͠m̶̳̥͔͔͚̈́̕̕̚͘͜͠u̵͚̓͗̔̐̽̍ċ̷̨̢̡̛̭͓̪͕̗̝̟͓̩͇͒̽͒͑̃́̇͌̊͊̄̈́͘͜h̶̳̮̟̃͂͛̑̚̚ ̵̢͉̣̲͇͕̈̈̍̕͘ͅm̴̱͙̜͔̋̐̅͗̋̈̀̌͛̈͘̕͠o̷̧̡̮̜͎͙̖̞͈̘̩̙͓̿̆̀̋͜r̶͙̗̯͎̎͛̌̈́̂̓̈̑̅̓͊̒̊̑̈ę̷͕͉̲̟̽̄͒̍͑̀̿̔̒̃̅̿́͘͝ͅ.̷̡̧̻̘̝̞̹̯̞͚̱̼͓̠͇̌̅͂.̷̧̫͙̮̞̳̼̤̪̖̦̟͕̏̐͑̾̈́̀̅͌̓.̵̧̛̛̖̥͔͍̲̲͉̺̩̪̭̋́̓̌͂̽̋̃̎͋͆͝͠ͅ
- 082349872349872 2y agoTIL about https://esolangs.org/wiki/Zalgo#Number_to_String https://esolangs.org/wiki/Zalgo#Number_to_String
- _nalply 2y agoSometimes it makes sense to reduce to Unicode confusables. For example the Greek letter Big Alpha looks like uppercase A. Or some characters look very similar like the slash and the fraction slash. Yes, Unicode has separate scalar values for them. There are Open Source tools to handle confusables. This is in addition to the search specified by Unicode.
- wanderingstan 2y agoI wrote such a library for Python here: https://github.com/wanderingstan/Confusables https://github.com/wanderingstan/Confusables My use case was to thwart spammers in our company’s channels, but I suppose it could be used to also normalize accent encoding issues. Basically converts a phrase into a regular expression matching confusables. E.g. "ℍ℮1೦" would match "Hello"
- _nalply 2y agoInteresting. What would you think about this approach: reduce each character to a standard form which is the same for all characters in the same confusable group? Then match all search input to this standard form. This means "ℍ℮1l೦" is converted to "Hello" before searching, for example.
- wanderingstan 2y agoIt’s been a long time since I wrote this, but I think the issue with that approach is the possibility of one character being confusable with more than one letter. I.e. there may not be a single correct form to reduce to.
- wyldfire 2y ago> For example the Greek letter Big Alpha looks like uppercase A. If they're truly drawn the same (are they?) then why have a distinct encoding?
- adzm 2y ago
- re 2y ago> Can you spot any difference between “blöb” and “blöb”? It's tricky to try to determine this because normalization can end up getting applied unexpectedly (for instance, on Mac, Firefox appears to normalize copied text as NFC while Chrome does not), but by downloading the page with cURL and checking the raw bytes I can confirm that there is no difference between those two words :) Something in the author's editing or publishing pipeline is applying normalization and not giving her the end result that she was going for. 00009000: 0a3c 7020 6964 3d22 3066 3939 223e 4361 .<p id="0f99">Ca 00009010: 6e20 796f 7520 7370 6f74 2061 6e79 2064 n you spot any d 00009020: 6966 6665 7265 6e63 6520 6265 7477 6565 ifference betwee 00009030: 6e20 e280 9c62 6cc3 b662 e280 9d20 616e n ...bl..b... an 00009040: 6420 e280 9c62 6cc3 b662 e280 9d3f 3c2f d ...bl..b...?</ Let's see if I can get HN to preserve the different forms: Composed: ü Decomposed: ü Edit: Looks like that worked!
- Eisenstein 2y agoPerhaps the author used the same character twice for effect, not suspecting someone would use curl to examine the raw bytes?
- mgaunard 2y agoI believe XML and HTML both require Unicode data to be in NFC.
- fanf2 2y agoI don’t think so? https://www.w3.org/TR/2008/REC-xml-20081126/#charsets https://www.w3.org/TR/2008/REC-xml-20081126/#charsets XML 1.1 says documents should be normalized but they are still well-formed even if not normalized https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-normalization-checking https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-normaliza... But you should not use XML 1.1 https://www.ibiblio.org/xml/books/effectivexml/chapters/03.html https://www.ibiblio.org/xml/books/effectivexml/chapters/03.h...
- layer8 2y agoYou believe incorrectly. Not even Canonical XML requires normalization: https://www.w3.org/TR/xml-c14n/#NoCharModelNorm https://www.w3.org/TR/xml-c14n/#NoCharModelNorm
- jph 2y agoNormalizing can help with search. For example for Ruby I maintain this gem: https://rubygems.org/gems/sixarm_ruby_unaccent https://rubygems.org/gems/sixarm_ruby_unaccent
- noname120 2y agoWow the code[1] looks horrific! Why not just do this: string → NFD → strip diacritics → NFC? See [2] for more. [1] https://github.com/SixArm/sixarm_ruby_unaccent/blob/eb674a78489c3b8656dd3a49997e6c393b238c19/lib/sixarm_ruby_unaccent/string.rb#L59-L17726 https://github.com/SixArm/sixarm_ruby_unaccent/blob/eb674a78... [2] https://stackoverflow.com/a/74029319/3634271 https://stackoverflow.com/a/74029319/3634271
- jph 2y agoSure does look horrific. :-) That's because it's the same code from 2008, long before Ruby had the Unicode handlers. In fact it's the same code as for many other programming languages, all the way back to Perl in the mid-1990s. I didn't create it; I merely ported it from Perl to Ruby. More important, the normalization does more than just diacritics. For example, it converts superscript 2 to ASCII 2. A better naming convention probably would have been "string normalize" or "searchable string" or some such, but the naming convention in 2012 was based on Perl.
- chuckadams 2y agoClearly the author already knows this, but it highlights the importance of always normalizing your input, and consistently using the same form instead of relying on the OS defaults.
- mckn1ght 2y agoAlso, never trust user input. File names are user inputs. You can execute XSS attacks via filenames on an unsecured site.
- makeitdouble 2y agoThe larger point is probably that search and comparison are inherently hard as what humans understand as equivalent isn't the same for the machine. Next stop will be upper case and lower case. Then different transcriptions of the same words in CJK.
- jesprenj 2y agoShould you really change filenames of users' files and depend on the fact that they are valid utf8? Wouldn't it be better to keep the original filename and use that most of the time sans the searches and indexing? Why don't you normalize latin alphabets filenames for indexing even further -- allow searching for "Führer" with queries like "Fuehrer" and "Fuhrer"?
- zeroCalories 2y agoI generally agree that you shouldn't change the file name, but in reality I bet OP stored it as another column in a database. For more aggressive normalization like that, I think it makes more sense to implement something like a spell checker that suggests similar files.
- noodlesUK 2y agoOne thing that is very unintuitive with normalization is that MacOS is much more aggressive with normalizing Unicode than Windows or Linux distros. Even if you copy and paste non-normalized text into a text box in safari on Mac, it will be normalized before it gets posted to the server. This leads to strange issues with string matching.
- codesnik 2y agoI was really surprised when realized that at least in hpfs cyrillics is normalized too. For example, no russian ever thinks that Й is a И with some diacritics. It's a different letter on it's own right. But mac normalizes it into two codepoints.
- anamexis 2y agoWell, there's no expectation in unicode that something viewed as a letter in its own right should use a single codepoint.
- asveikau 2y agoI dislike explaining string compares to monolingual English speakers who are programmers. Similar to this phenomenon of Й/И is people who think ñ and n should compare equally, or ç and c, or that the lowercase of I is always i (or that case conversion is locale-independent). In something like a code review, people will think you're insane for pointing out that this type of assumption might not hold. Actually, come to think of it, explaining localization bugs at all is a tough task in general.
- iforgotpassword 2y agoWell, I do like this behavior for search though. I don't want to install a new keyboard layout just to be able to search for a Spanish word.
- makeitdouble 2y agoSearch probably needs both modes. A literal and a fuzzy one.
- mawise 2y agoI ran into this building search for a family tree project. I found out that Rails provides `ActiveSupport::Inflector.transliterate()` which I could use for normalization.
- Havoc 2y agoFor those intrigued by this sort of thing check tech talk “plain text” by Dylan Beattie Absolute gem. His other talks are entertaining too
- hanche 2y agoHe seems to have done that talk several times. I watched the 2022 one. Time well spent!
- keybored 2y agoI try to avoid Unicode in filenames (I’m on Linux). It seems that a lot of normal users might have the same intuition as well? I get the sense that a lot will instinctually transcode to ASCII, like they do for URLs.
- zzo38computer 2y agoI also try to avoid non-ASCII characters in file names (and I am also on Linux). I also like to avoid spaces and most punctuations in file names (if I need word separation I can use underscores or hyphens).
- skissane 2y agoSometimes I wish they had disallowed spaces in file names. Historically, many systems were very restrictive in what characters are allowed in file names. In part in reaction to that, Unix went to the other extreme, allowing any byte except NUL and slash. I think that was a mistake - allowing C0 control characters in file names (bytes 0x01 thru 0x1F) serves no useful use case, it just creates the potential for bugs and security vulnerabilities. I wish they’d blocked them. POSIX debated banning C0 controls, although appears to have settled on just a recommendation (not a mandate) that implementations disallow newline: https://www.austingroupbugs.net/view.php?id=251 https://www.austingroupbugs.net/view.php?id=251
- samatman 2y agoI firmly agree that control characters, including tab and newline, should have been shown the door decades ago. All they do is make problems. But spaces in filenames are really just an inconvenience at most for heavy terminal users, and are a natural thing to use for basically everyone else. All my markdown files are word-word-word.md, but all my WYSIWIG documents are "Word word word.doc". The hassle of constantly explaining to angry civilians "why won't it let me write this file" would be worse than the hassle of having to quote or backslash-escape the occasional path in the shell.
- 2y ago
- juujian 2y agoI ran into encoding problems so many times, I just use ASCII aggressively now. There is still kanji, Hanzi, etc. but at least for Western alphabets, not worth the hassle.
- layer8 2y agoThe article isn’t about non-Unicode encodings.
- juujian 2y agoMeant to write ASCII
- zzo38computer 2y agoI also just use ASCII when possible; it is the most likely to work and to be portable. For some purposes, other character sets/encodings are better, but which ones are better depends on the specific case (not only what language of text but also the use of the text in the computer, etc).
- arp242 2y agoThis works fine as a personal choice, but doesn't really work if you're writing something other random people interact with. Even for just English it doesn't work all that well because it lacks things like the Euro which is fairly common (certainly in Europe), there are names with diacritics (including "native" names, e.g. in Ireland it's common), there are too many loanwords with diacritics, and ASCII has a somewhat limited set of punctuation. There are some languages where this can sort of work (e.g. Indonesian can be fairly reliably written in just ASCII), although even there you will run in to some of these issue. It certainly doesn't work for English, and even less for other Latin-based European languages.
- blablabla123 2y agoAs a German macOS user with US keyboard I run into a related issue every now and then. What's nice about macOS is I can easily combine Umlaute but also other common letters from European languages without any extra configuration. But some (Web) Applications stumble upon it, while entering because it's like: 1. ¨ (Option-u) 2. ü (u pressed)
- kps 2y agoEarly on, Netscape effectively exposed Windows keyboard events directly to Javascript, and browsers on other platforms were forced to try to emulate Windows events, which is necessarily imperfect given different underlying input systems. “These features were never formally specified and the current browser implementations vary in significant ways. The large amount of legacy content, including script libraries, that relies upon detecting the user agent and acting accordingly means that any attempt to formalize these legacy attributes and events would risk breaking as much content as it would fix or enable. Additionally, these attributes are not suitable for international usage, nor do they address accessibility concerns.” The current method is much better designed to avoid such problems, and has been supported by all major browsers for quite a while now (the laggard Safari arriving 7 years from this Tuesday). https://www.w3.org/TR/uievents https://www.w3.org/TR/uievents
- NotYourLawyer 2y agoASCII should be enough for anyone.
- zzo38computer 2y agoASCII is good for a lot of stuff, but not for everything. Sometimes, other character sets/encodings will be better, but which one is better depends on the circumstances. (Unicode does have many problems, though. My opinion is that Unicode is no good.)
- hanche 2y agoAnd who needs more than 640 kilobytes of memory anyhow?
- mckn1ght 2y agoDon’t forget butterflies in case you need to edit some text.
- euroderf 2y agoFilling the upper 128 characters with box-drawing characters was all well & fine, but you'd think IBM might've given some thought instead to defining a character set that would have maximum applicability for the set of all (Roman alphabet -descended) Western languages. (Plus pinyin.)
- userbinator 2y agoits[sic] 2024, and we are still grappling with Unicode character encoding problems More like "because it's 2024." This wouldn't be a problem before the complexity of Unicode became prevalent.
- bornfreddy 2y agoYou mean this wouldn't be a problem if we used the myriad different encodings like we did before Unicode, because we would probably not be able to even save the files anyway? So true.
- userbinator 2y agoBefore Unicode, most systems were effectively "byte-transparent" and encoding only a top-level concern. Those working in one language would use the appropriate encoding (likely CP1252 for most Latin languages) and there wouldn't be confusion about different bytes for same-looking characters.
- bawolff 2y agoMy understanding is way back in the day, people would use ascii backspace to combine an ascii letter with an ascii accent character.
- kps 2y agoASCII 1967 (and the equivalent ECMA-6) suggested this, and that the characters ,"'`~ could be shaped to look like a cedilla, diaeresis, acute accent, grave accent, and raised tilde respectively for that purpose. But I've never once seen or heard of that method used. ASCII also allowed the characters @[\]^{|}~ to be replaced by others in ‘national character allocations’, and this was commonly used in the 7-bit ASCII era. In the 8-bit days, for alphabetic scripts, typically the range 0xA0–0xFF would represent a block of characters (e.g. an ISO 8859¹ range) selected by convention or explicitly by ISO 2022². (There were also pre-standard similar methods like DEC NRCS and IBM's EBCDIC code pages.) ¹ https://en.wikipedia.org/wiki/ISO/IEC_8859 https://en.wikipedia.org/wiki/ISO/IEC_8859 ¹ https://en.wikipedia.org/wiki/ISO/IEC_2022 https://en.wikipedia.org/wiki/ISO/IEC_2022
- raffy 2y agoI created a bunch of Unicode tools during development of ENSIP-15 for ENS (Ethereum Name Service) ENSIP-15 Specification: https://docs.ens.domains/ensip/15 https://docs.ens.domains/ensip/15 ENS Normalization Tool: https://adraffy.github.io/ens-normalize.js/test/resolver.html https://adraffy.github.io/ens-normalize.js/test/resolver.htm... Browser Tests: https://adraffy.github.io/ens-normalize.js/test/report-nf.html https://adraffy.github.io/ens-normalize.js/test/report-nf.ht... 0-dependancy JS Unicode 15.1 NFC/NFD Implementation [10KB] https://github.com/adraffy/ens-normalize.js/blob/main/dist/nf.min.js https://github.com/adraffy/ens-normalize.js/blob/main/dist/n... Unicode Character Browser: https://adraffy.github.io/ens-normalize.js/test/chars.html https://adraffy.github.io/ens-normalize.js/test/chars.html Unicode Emoji Browser: https://adraffy.github.io/ens-normalize.js/test/emoji.html https://adraffy.github.io/ens-normalize.js/test/emoji.html Unicode Confusables: https://adraffy.github.io/ens-normalize.js/test/confused.html https://adraffy.github.io/ens-normalize.js/test/confused.htm...
- josephcsible 2y agoIMO, it was a mistake for Unicode to provide multiple ways to represent 100% identical-looking characters. After all, ASCII doesn't have separate "c"s for "hard c" and "soft c".
- striking 2y agoIf you take a peek at an extended ASCII table (like the one at https://www.ascii-code.com/ https://www.ascii-code.com/), you'll notice that 0xC5 specifies a precomposed capital A with ring above. It predates Unicode. Accepting that that's the case, and acknowledging that forward compatibility from ASCII to Unicode is a good thing (so we don't have any more encodings, we're just extending the most popular one), and understanding that you're going to have the ring-above diacritic in Unicode anyway... you kind of just end up with both representations.
- arp242 2y agoEverything can just be pre-composed; Unicode doesn't need composing characters. There's history here, with Unicode originally having just 65k characters, and hindsight is always 20/20, but I do wish there was a move towards deprecating all of this in favour of always using pre-composed. Also: what you linked isn't "ASCII" and "extended ASCII" doesn't really mean anything. ASCII is a 7-bit character set with 128 characters, and there are dozens, if not hundreds, of 8-bit character sets with 256 characters. Both CP-1252 and ISO-8859-1 saw wide use for Latin alphabet text, but others saw wide use for text in other scripts. So if you give me a document and tell me "this is extended ASCII" then I still don't know how to read it and will have to trail-and-error it. I don't think Unicode after U+007F is compatible with any specific character set? To be honest I never checked, and I don't see in what case that would be convenient. UTF-8 is only compatible with ASCII, not any specific "extended ASCII".
- zokier 2y agoFor roundtripping e.g. https://en.wikipedia.org/wiki/VSCII https://en.wikipedia.org/wiki/VSCII you do need both composing characters and precomposed characters.
- ulrischa 2y agoIt is really so awful that we have to deal with encoding issues in 2024.
- mglz 2y agoMy last name contains an ü and it has been consistenly horrible. * When I try to preemptively replace ü with ue many institutions and companies refuse to accept it because it does not match my passport * Especially in France, clerks try to emulate ü with the diacritics used for the trema e, ë. This makes it virtually impossible to find me in a system again * Sometimes I can enter my name as-is and there seems to be no problem, only for some other system to mangle it to � or or a box. This often triggers error downstream I have no way of fixing * Sometimes, people print a u and add the diacritics by hand on the label. This is nice, but still somehow wrong. I wonder what the solution is. Give up and ask people to consistenly use a ascii-only name? Allow everybody 1000+ unicode characters as a name and go off that string? Officially change my name?
- userbinator 2y agoEveryone's name should just be a GUID. /s
- BuyMyBitcoins 2y agoFalsehoods Programmers Believe About Names, #41 - People have GUIDs. https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-...
- makeitdouble 2y agoThe part I came to love about France in general is that while all of these are broken, the people dealing with it will completely agree it's broken and amply sympathize, but just accept your name is printed as G�nter. Same for names that don't fit field lengths, addresses that require street numbers etc. It's a real pain to deal with all of it and each system will fail in its own way to make your life a mess, but people will embrace the mess and won't blink an eye when you bring paper that just don't match.
- zokier 2y agoUnder GDPR people have the right to have their personal data to be accurate, there was a legal case exactly about this: https://news.ycombinator.com/item?id=38009963 https://news.ycombinator.com/item?id=38009963
- CoastalCoder 2y agoIsn't ü/ü-encoding a solved problem on Unix systems? </joke>
- earthboundkid 2y agoThis isn’t an encoding problem. It’s a search problem.
- ComputerGuru 2y agoZFS can be configured to force the use of a particular normalized Unicode form for all filenames. Amazing filesystem.
- WalterBright 2y ago> Can you spot any difference between “blöb” and “blöb”? That's where Unicode lost its way and went into a ditch. Identical glyphs should always have the same code point (or sequence of code points). Imagine all the coding time spent trying to deal with this nonsense.
- euroderf 2y agoA fine sentiment, but (FWIW) it goes into a ditch when dealing with CJK.
- WalterBright 2y agoOne unique sequence per unique glyph takes care of all that.
- euroderf 2y agoAh, but define "unique" after centuries of borrowing.
- WalterBright 2y agoIf the glyphs are the same, then they have the same Unicode sequence. Nothing hard to understand about that.
- euroderf 2y agoWell, nothing I've read about Unicode & CJK makes me think that it is that straightforward.
- WalterBright 2y agoThat's because people get tangled up in the idea that Unicode glyphs are supposed to be imbued with semantic content. Remove that, and the problems go away.
- anewhnaccount2 2y agoReminded of this classic diveintomark post http://web.archive.org/web/20080209154953/http://diveintomark.org/archives/2004/07/06/nfc http://web.archive.org/web/20080209154953/http://diveintomar...
- weinzierl 2y agoThis article is about a failure to do normalization properly and is not really about an issue with Unicode. Regardless what some comments seem to allude to, an Umlaut-ü should always render exactly the same, no matter how it is encoded. There is, however, a real ü/ü conundrum, regarding ü-Umlaut and ü-diaeresis. The ü's in the words Müll and aigüe should render differently. The dots in the French word are too close to the letter. In printed French material this is usually not the case. Unfortunately Unicode does not capture the nuance of the semantic difference between an Umlaut and a Tréma or Diaresis. The Umlaut is a letter in its own right with its own space in the alphabet. An ü-Umlaut can never be replaced by an u alone. This would be just as wrong as replacing a p by a q. Just because they look similar does not mean they are interchangeable. [1] The Tréma on the other hand, is a modifier that helps with proper pronunciation of letter combinations. It is not a letter in its own right, just additional information. It can sometimes move over other adjacent letters (aiguë=aigüe, both are possible) too. Some say this should be handled by the rendering system similar to Han-Unification, but I strongly disagree with this. French words are often used in German and vice versa. Currently there is no way to render a German loan word with Umlaut (e.g. führer) properly in French. [1] The only acceptable replacement for ü-Umlaut is the combination ue.
- philkrylov 2y agoThe article suggests using NFC normalization as a simple solution, but fails to mention that HFS+ always does NFD normalization to file names, and APFS kinda does not but some layer above it actually does (https://eclecticlight.co/2021/05/08/explainer-unicode-normalization-and-apfs/ https://eclecticlight.co/2021/05/08/explainer-unicode-normal...), and ZFS has this behavior controlled by a dataset-level option. I don't see how applying its suggestion literally (just normalize to NFC before saving) can work.