8
$\begingroup$

What unicode characters are invalid as a Symbol name?

Ideally I'm looking for a complete list.

Here is the current list

"\r\n~`!@#$%^&*()-_=+[{]}\|:;\"',<.>/?"
$\endgroup$
  • 1
    $\begingroup$ Perhaps, generate them all and try to use them? $\endgroup$ – bbgodfrey Sep 5 '15 at 16:15
  • $\begingroup$ Note that symbols cannot start with numbers as well. $\endgroup$ – J. M. is away Sep 5 '15 at 16:52
  • 1
    $\begingroup$ something like Catch@Symbol@FromCharacterCode/@Range[..] (no mathematica on this machine to work it out exactly ) $\endgroup$ – george2079 Sep 5 '15 at 16:52
8
$\begingroup$

394 Unicode characters that are not valid Mathematica Symbols can be found from

ss = Quiet@Table[{tem = "\\:" <> IntegerString[i, 16, 4], Symbol[tem]}, {i, 0, 16^4 - 1}];
notsym = Cases[ss, {z_, Symbol[__]} -> z]

The list is largely but not entirely complete.

To obtain the printable symbols for many of these unicodes, use

Map[FromCharacterCode[{FromDigits[StringDelete[#, "\\:"], 16]}] &, notsym]

for Mathematica 10.1 and later. Otherwise, use (as suggested by Williams and Oleksandr R)

Map[FromCharacterCode[{FromDigits[StringReplace[ToString@#, "\\:" :> ""], 16]}] &, notsym]

{"", " ", " ", "", " ", " ", " ", "!", "\"", "#", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "[", "\", "]", "^", "_", "", "{", "|", "}", "~", "", " ", "¬", "°", "±", "·", "×", "÷", "π", " ", " ", " ", "‘", "’", "“", "”", "
", "
", "⁃", " ", "⁠", "⁢", "←", "↑", "→", "↓", "↔", "↕", "↖", "↗", "↘", "↙", "↤", "↥", "↦", "↧", "↼", "↽", "↾", "↿", "⇀", "⇁", "⇂", "⇃", "⇄", "⇅", "⇆", "⇋", "⇌", "⇐", "⇑", "⇒", "⇓", "⇔", "⇕", "⇤", "⇥", "⇵", "∀", "∂", "∃", "∄", "∆", "∇", "∈", "∉", "∋", "∌", "∍", "∏", "∐", "∑", "−", "∓", "∕", "∖", "∘", "√", "∝", "∞", "∣", "∥", "∦", "∧", "∨", "∫", "∮", "∯", "∲", "∳", "∴", "∵", "∶", "∷", "∼", "≀", "≁", "≂", "≃", "≄", "≅", "≇", "≈", "≉", "≍", "≎", "≏", "≐", "≠", "≡", "≢", "≤", "≥", "≦", "≧", "≨", "≩", "≪", "≫", "≭", "≮", "≯", "≰", "≱", "≲", "≳", "≴", "≵", "≶", "≷", "≸", "≹", "≺", "≻", "≼", "≽", "≾", "≿", "⊀", "⊁", "⊂", "⊃", "⊄", "⊅", "⊆", "⊇", "⊈", "⊉", "⊎", "⊏", "⊐", "⊑", "⊒", "⊓", "⊔", "⊕", "⊖", "⊗", "⊙", "⊢", "⊣", "⊤", "⊥", "⊨", "⊲", "⊳", "⊴", "⊵", "⊻", "⊼", "⊽", "⋀", "⋁", "⋂", "⋃", "⋄", "⋆", "⋚", "⋛", "⋠", "⋡", "⋢", "⋣", "⋨", "⋩", "⋪", "⋫", "⋬", "⋭", "⌈", "⌉", "⌊", "⌋", "⌢", "⌣", "〈", "〉", "␣", "⟂", "⟵", "⟶", "⟷", "⟸", "⟹", "⟺", "⤒", "⤓", "⥎", "⥏", "⥐", "⥑", "⥒", "⥓", "⥔", "⥕", "⥖", "⥗", "⥘", "⥙", "⥚", "⥛", "⥜", "⥝", "⥞", "⥟", "⥠", "⥡", "⥮", "⥯", "⥰", "⧏", "⧐", "⧦", "⩽", "⩾", "⪡", "⪢", "⪯", "⪰", "⫤", " ", "〚", "〛", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "\)", "\!", "\@", "\%", "\^", "\&", "\*", "\(", "\_", "\+", "\/", "\", ""}

(Note: Nonfatal syntax errors above fixed courtesy of Silvia by replacing ":" by "\:".)

Alternative Approach

An alternative, faster approach to obtaining the non-Symbol characters above is

Quiet@Cases[Symbol[FromCharacterCode[#]] & /@ Range[0, 16^4 - 1], Symbol[z__] -> z]

{"", "", "\t", "\n", "", "\f", "\r", " ", "!", "\"", "#", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "[", "\", "]", "^", "_", "", "{", "|", "}", "~", "", " ", "¬", "°", "±", "·", "*", "/", "π", " ", " ", " ", "'", "'", """, """, " ", " ", "⁃", " ", "", "⁢", "←", "↑", "→", "↓", "↔", "↕", "↖", "↗", "↘", "↙", "↤", "↥", "↦", "↧", "↼", "↽", "↾", "↿", "⇀", "⇁", "⇂", "⇃", "⇄", "⇅", "⇆", "⇋", "⇌", "⇐", "⇑", "⇒", "⇓", "⇔", "⇕", "⇤", "⇥", "⇵", "∀", "∂", "∃", "∄", "∆", "∇", "∈", "∉", "∋", "∌", "∍", "∏", "∐", "∑", "−", "∓", "∕", "∖", "∘", "√", "∝", "∞","∣", "∥", "∦", "∧", "∨", "∫", "∮", "∯", "∲", "∳", "∴", "∵", "∶", "∷", "∼", "≀", "≁", "≂", "≃", "≄", "≅", "≇", "≈", "≉", "≍", "≎", "≏", "≐", "!=", "≡", "≢", "<=", ">=", "≦", "≧", "≨", "≩", "≪", "≫", "≭", "≮", "≯", "≰", "≱", "≲", "≳", "≴", "≵", "≶", "≷", "≸", "≹", "≺", "≻", "≼", "≽", "≾", "≿", "⊀", "⊁", "⊂", "⊃", "⊄", "⊅", "⊆", "⊇", "⊈", "⊉", "⊎", "⊏", "⊐", "⊑", "⊒", "⊓", "⊔", "⊕", "⊖", "⊗", "⊙", "⊢", "⊣", "⊤", "⊥", "⊨", "⊲", "⊳", "⊴", "⊵", "⊻", "⊼", "⊽", "⋀", "⋁", "⋂", "⋃", "⋄", "⋆", "⋚", "⋛", "⋠", "⋡", "⋢", "⋣", "⋨", "⋩", "⋪", "⋫", "⋬", "⋭", "⌈", "⌉", "⌊", "⌋", "⌢", "⌣", "〈", "〉", "␣", "⟂", "⟵", "⟶", "⟷", "⟸", "⟹", "⟺", "⤒", "⤓", "⥎", "⥏", "⥐", "⥑", "⥒", "⥓", "⥔", "⥕", "⥖", "⥗", "⥘", "⥙", "⥚", "⥛", "⥜", "⥝", "⥞", "⥟", "⥠", "⥡", "⥮", "⥯", "⥰", "⧏", "⧐", "⧦", "⩽", "⩾", "⪡", "⪢", "⪯", "⪰", "⫤", " ", "[[", "]]", "<|", "|>", " ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "<->", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "==", "", "", "", "", "", "", "", "", ":>", "", "->", "", "", "", "", "", "", "", "", "", "", "", "E", "I", "", "", "<<", ">>", "", "", "", "", "", "\)", "\!", "\@", "\%", "\^", "\&", "\*", "\(", "\_", "\+", "\/", "\", "=="}

This list has one more character, \:0000 and also displays a few of the characters differently. Note also that one of the characters displays as a linefeed. (I had to copy this second list in InputForm, which was unnecessary for the earlier list.) The corresponding Unicode is given by

IntegerString[#, 16, 4] & /@ Quiet@Flatten@Cases[Symbol[FromCharacterCode[#]] & /@ 
    Range[0, 16^4 - 1], Symbol[z__] -> ToCharacterCode[z]]

{"0000", "0007", "0009", "000a", "000b", "000c", "000d", "0020", "0021", "0022", "0023", "0025", "0026", "0027", "0028", "0029", "002a", "002b", "002c", "002d", "002e", "002f", "0030", "0031", "0032", "0033", "0034", "0035", "0036", "0037", "0038", "0039", "003a", "003b", "003c", "003d", "003e", "003f", "0040", "005b", "005c", "005d", "005e", "005f", "0060", "007b", "007c", "007d", "007e", "007f", "00a0", "00ac", "00b0", "00b1", "00b7", "00d7", "00f7", "03c0", "2005", "2009", "200a", "2018", "2019", "201c", "201d", "2028", "2029", "2043", "205f", "2060", "2062", "2190", "2191", "2192", "2193", "2194", "2195", "2196", "2197", "2198", "2199", "21a4", "21a5", "21a6", "21a7", "21bc", "21bd", "21be", "21bf", "21c0", "21c1", "21c2", "21c3", "21c4", "21c5", "21c6", "21cb", "21cc", "21d0", "21d1", "21d2", "21d3", "21d4", "21d5", "21e4", "21e5", "21f5", "2200", "2202", "2203", "2204", "2206", "2207", "2208", "2209", "220b", "220c", "220d", "220f", "2210", "2211", "2212", "2213", "2215", "2216", "2218", "221a", "221d", "221e", "2223", "2225", "2226", "2227", "2228", "222b", "222e", "222f", "2232", "2233", "2234", "2235", "2236", "2237", "223c", "2240", "2241", "2242", "2243", "2244", "2245", "2247", "2248", "2249", "224d", "224e", "224f", "2250", "2260", "2261", "2262", "2264", "2265", "2266", "2267", "2268", "2269", "226a", "226b", "226d", "226e", "226f", "2270", "2271", "2272", "2273", "2274", "2275", "2276", "2277", "2278", "2279", "227a", "227b", "227c", "227d", "227e", "227f", "2280", "2281", "2282", "2283", "2284", "2285", "2286", "2287", "2288", "2289", "228e", "228f", "2290", "2291", "2292", "2293", "2294", "2295", "2296", "2297", "2299", "22a2", "22a3", "22a4", "22a5", "22a8", "22b2", "22b3", "22b4", "22b5", "22bb", "22bc", "22bd", "22c0", "22c1", "22c2", "22c3", "22c4", "22c6", "22da", "22db", "22e0", "22e1", "22e2", "22e3", "22e8", "22e9", "22ea", "22eb", "22ec", "22ed", "2308", "2309", "230a", "230b", "2322", "2323", "2329", "232a", "2423", "27c2", "27f5", "27f6", "27f7", "27f8", "27f9", "27fa", "2912", "2913", "294e", "294f", "2950", "2951", "2952", "2953", "2954", "2955", "2956", "2957", "2958", "2959", "295a", "295b", "295c", "295d", "295e", "295f", "2960", "2961", "296e", "296f", "2970", "29cf", "29d0", "29e6", "2a7d", "2a7e", "2aa1", "2aa2", "2aaf", "2ab0", "2ae4", "3000", "301a", "301b", "f113", "f114", "f360", "f361", "f380", "f382", "f383", "f384", "f39e", "f3a2", "f3a3", "f3a8", "f3a9", "f3ad", "f3b1", "f3b2", "f3b3", "f3b4", "f3bd", "f3be", "f3bf", "f3c6", "f3c7", "f3c8", "f3c9", "f3ce", "f3d0", "f3d1", "f3d2", "f3d3", "f3d4", "f3d5", "f3d6", "f3d7", "f3d8", "f3d9", "f3da", "f3db", "f3dc", "f3dd", "f3de", "f400", "f401", "f402", "f412", "f413", "f422", "f423", "f424", "f427", "f428", "f429", "f42b", "f42d", "f42e", "f42f", "f431", "f432", "f4a0", "f4a1", "f4a2", "f4a3", "f4a4", "f4a5", "f51e", "f51f", "f520", "f522", "f523", "f525", "f526", "f52a", "f52b", "f603", "f604", "f605", "f606", "f74b", "f74c", "f74d", "f74e", "f74f", "f760", "f761", "f762", "f765", "f767", "f76d", "f76e", "f76f", "f7c0", "f7c1", "f7c2", "f7c5", "f7c6", "f7c7", "f7c8", "f7c9", "f7ca", "f7cb", "f7cc", "f7cd", "f7d9"}

Caution

Being a Symbol and being useful as a Symbol are two different things. For instance

Symbol[FromCharacterCode[62378]]

returns a nondisplaying symbol; i.e., the corresponding Out appears empty. Nonetheless, a Symbol really is in that Out line.

Cases[{%}, z_Symbol -> True]
(* True *)

But, it is not obvious how one would use this or many others nondisplaying Symbols.

$\endgroup$
  • 1
    $\begingroup$ There is a bug in your code some of the examples are identical except for a \ in front of the character. $\endgroup$ – William Sep 5 '15 at 21:43
  • $\begingroup$ There is no obvious way to remove the duplicates. StringLength doesn't work. $\endgroup$ – William Sep 6 '15 at 0:08
  • $\begingroup$ @William they are not duplicates in reality; they are characters from the Unicode private use area that simply appear as if they are two individual characters. $\endgroup$ – Oleksandr R. Sep 6 '15 at 0:16
  • $\begingroup$ @OleksandrR. You right answer updated to not use StringDelete. It takes up two characters but only one its wierd. $\endgroup$ – William Sep 6 '15 at 0:20
  • 2
    $\begingroup$ @William Mathematica was designed (using Unicode) before Unicode was fully standardized. It is not completely free of (what we would now consider) bugs resulting from this non-standard Unicode handling. These particular characters are not allowed in symbol names because they are used in the construction of raw box expressions. $\endgroup$ – Oleksandr R. Sep 6 '15 at 0:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.