GithubHelp home page GithubHelp logo

cxlsx_to_csv's Introduction

cxlsx_to_csv

cxlsx_to_csv is a simple converter of XLSX Excel 2007 files (a.k.a. Open Office XML) to CSV

FEATURES:

  • Simple converter, pretty fast as done in C.
  • Only depends on miniz (included for convenience) and one XML library, that can be either Expat or Parsifal or Mini-XML.

The XLSX format is just a glorified ZIP (that I open thanks to miniz), containing a set of XML files (that I parse thanks to Expat or Mini-XML or Parsifal). Notice that Excel stores dates as the number of days that have elapsed since 1-January-1900 (the Excel Epoch), and this program exports dates simply as the floating point value they are stored.

SYNOPSIS:

cxlsx_to_csv -if input.xlsx [-sh sheet_id] [-of output.csv]
    input.xlsx  input spreadsheet in Excel 2007 format (Office Open XML)
    sheet_id    number of the sheet within the workbook (default is first one)
    output.csv  output CSV file (default is STDOUT)

COMPILATION:

It is possible to choose at compilation time from a number of XML parsing libraries:

  • Expat
    cc -DCONFIG_EXPAT -o cxlsx_to_csv cxlsx_to_csv.c -l expat
  • Parsifal
    cc -DCONFIG_PARSIFAL -o cxlsx_to_csv cxlsx_to_csv.c -lparsifal
  • Mini-XML
    cc -DCONFIG_MXML -o cxlsx_to_csv cxlsx_to_csv.c -l mxml

If you choose no XML library, then you may benchmark the time used exclusively by the decompressing step:
cc -o cxlsx_to_csv cxlsx_to_csv.c

SPEED COMPARISON:

  • Tested under Ubuntu 15.10 on an Intel i3-3217U CPU @ 1.80GHz, with a Crucial CT120M500 SSD.
  • Locale set to LC_ALL=C.UTF-8
  • The input spreadsheet a.xlsx has 48665 rows and 46 columns, and weights 9165KB.
Tool Command Time (real/user/sys)
cxlsx_to_csv (Decompressing time) cxlsx_to_csv -if a.xlsx -of a.csv 1.574s/1.564s/0.008s
cxlsx_to_csv (Expat) cxlsx_to_csv -if a.xlsx -of a.csv 3.020s/2.960s/0.064s
cxlsx_to_csv (Parsifal) cxlsx_to_csv -if a.xlsx -of a.csv 3.957s/3.884s/0.072s
cxlsx_to_csv (Mini-XML) cxlsx_to_csv -if a.xlsx -of a.csv 4.967s/4.880s/0.088s
Gnumeric ssconvert --export-type=Gnumeric_stf:stf_assistant -O 'eol=windows separator=, format=raw transliterate-mode=escape quoting-mode=auto' a.xlsx a.csv 11.869s/11.692s/0.184s
LibreOffice 5 soffice --headless --convert-to csv a.xlsx 12.779s/15.292s/0.536s
xlsx2csv xlsx2csv.py a.xlsx a.csv 39.925s/39.684s/0.148s

cxlsx_to_csv's People

Contributors

vpaesa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

cxlsx_to_csv's Issues

Bug: Failed test case 07_hyperlink_01.xlsx

I need to deal with Excel hyperlinks, probably inside EndSharedStrings()

diff expected_07_hyperlink_01.tab validating_07_hyperlink_01.tab
2c2
< double quotation mark

---
> ▒y

Bug: Failed test case 10_entities_02.xlsx

I need to deal with XML entitites

diff expected_10_entities_01.tab validating_10_entities_01.tab
2,6c2,6
< quot  "       U+0022 (34)     XML 1.0 double quotation mark
< amp   &       U+0026 (38)     XML 1.0 ampersand
< apos  '       U+0027 (39)     XML 1.0 apostrophe (apostrophe-quote)
< lt    <       U+003C (60)     XML 1.0 less-than sign
< gt    >       U+003E (62)     XML 1.0 greater-than sign

---
> quot  "       U+0022 (34)     XML 1.0 amp
> &     U+0026 (38)     ampersand       XML 1.0 apos
> '     U+0027 (39)     lt      XML 1.0 <
> U+003C (60)   less-than sign  gt      XML 1.0 >
> U+003E (62)   greater-than sign       HTML 2.0        XML 1.0 HTMLspecial
diff expected_10_entities_02.tab validating_10_entities_02.tab
1,254c1,254
< Name  Character       Unicode code point (decimal)    Standard        DTD[a]  Old ISO subset[b]       Description[c]
< quot  "       U+0022 (34)     HTML 2.0        HTMLspecial     ISOnum  quotation mark (APL quote)
< amp   &       U+0026 (38)     HTML 2.0        HTMLspecial     ISOnum  ampersand
< apos  '       U+0027 (39)     XHTML 1.0       HTMLspecial     ISOnum  apostrophe (apostrophe-quote); see below
< lt    <       U+003C (60)     HTML 2.0        HTMLspecial     ISOnum  less-than sign
< gt    >       U+003E (62)     HTML 2.0        HTMLspecial     ISOnum  greater-than sign
< nbsp          U+00A0 (160)    HTML 3.2        HTMLlat1        ISOnum  no-break space (non-breaking space)[d]
< iexcl ¡       U+00A1 (161)    HTML 3.2        HTMLlat1        ISOnum  inverted exclamation mark
< cent  ¢       U+00A2 (162)    HTML 3.2        HTMLlat1        ISOnum  cent sign
< pound £       U+00A3 (163)    HTML 3.2        HTMLlat1        ISOnum  pound sign
< curren        ¤       U+00A4 (164)    HTML 3.2        HTMLlat1        ISOnum  currency sign
< yen   ¥       U+00A5 (165)    HTML 3.2        HTMLlat1        ISOnum  yen sign (yuan sign)
< brvbar        ¦       U+00A6 (166)    HTML 3.2        HTMLlat1        ISOnum  broken bar (broken vertical bar)
< sect  §       U+00A7 (167)    HTML 3.2        HTMLlat1        ISOnum  section sign
< uml   ¨       U+00A8 (168)    HTML 3.2        HTMLlat1        ISOdia  diaeresis (spacing diaeresis); see Germanic umlaut
< copy  ©       U+00A9 (169)    HTML 3.2        HTMLlat1        ISOnum  copyright symbol
< ordf  ª       U+00AA (170)    HTML 3.2        HTMLlat1        ISOnum  feminine ordinal indicator
< laquo «       U+00AB (171)    HTML 3.2        HTMLlat1        ISOnum  left-pointing double angle quotation mark (left pointing guillemet)
< not   ¬       U+00AC (172)    HTML 3.2        HTMLlat1        ISOnum  not sign
< shy           U+00AD (173)    HTML 3.2        HTMLlat1        ISOnum  soft hyphen (discretionary hyphen)
< reg   ®       U+00AE (174)    HTML 3.2        HTMLlat1        ISOnum  registered sign (registered trademark symbol)
< macr  ¯       U+00AF (175)    HTML 3.2        HTMLlat1        ISOdia  macron (spacing macron, overline, APL overbar)
< deg   °       U+00B0 (176)    HTML 3.2        HTMLlat1        ISOnum  degree symbol
< plusmn        ±       U+00B1 (177)    HTML 3.2        HTMLlat1        ISOnum  plus-minus sign (plus-or-minus sign)
< sup2  ²       U+00B2 (178)    HTML 3.2        HTMLlat1        ISOnum  superscript two (superscript digit two, squared)
< sup3  ³       U+00B3 (179)    HTML 3.2        HTMLlat1        ISOnum  superscript three (superscript digit three, cubed)
< acute ´       U+00B4 (180)    HTML 3.2        HTMLlat1        ISOdia  acute accent (spacing acute)
< micro µ       U+00B5 (181)    HTML 3.2        HTMLlat1        ISOnum  micro sign
< para  ¶       U+00B6 (182)    HTML 3.2        HTMLlat1        ISOnum  pilcrow sign (paragraph sign)
< middot        ·       U+00B7 (183)    HTML 3.2        HTMLlat1        ISOnum  middle dot (Georgian comma, Greek middle dot)
< cedil ¸       U+00B8 (184)    HTML 3.2        HTMLlat1        ISOdia  cedilla (spacing cedilla)
< sup1  ¹       U+00B9 (185)    HTML 3.2        HTMLlat1        ISOnum  superscript one (superscript digit one)
< ordm  º       U+00BA (186)    HTML 3.2        HTMLlat1        ISOnum  masculine ordinal indicator
< raquo »       U+00BB (187)    HTML 3.2        HTMLlat1        ISOnum  right-pointing double angle quotation mark (right pointing guillemet)
< frac14        ¼       U+00BC (188)    HTML 3.2        HTMLlat1        ISOnum  vulgar fraction one quarter (fraction one quarter)
< frac12        ½       U+00BD (189)    HTML 3.2        HTMLlat1        ISOnum  vulgar fraction one half (fraction one half)
< frac34        ¾       U+00BE (190)    HTML 3.2        HTMLlat1        ISOnum  vulgar fraction three quarters (fraction three quarters)
< iquest        ¿       U+00BF (191)    HTML 3.2        HTMLlat1        ISOnum  inverted question mark (turned question mark)
< Agrave        À       U+00C0 (192)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter A with grave accent (Latin capital letter A grave)
< Aacute        Á       U+00C1 (193)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter A with acute accent
< Acirc        U+00C2 (194)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter A with circumflex
< Atilde        Ã       U+00C3 (195)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter A with tilde
< Auml  Ä       U+00C4 (196)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter A with diaeresis
< Aring Å       U+00C5 (197)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter A with ring above (Latin capital letter A ring)
< AElig Æ       U+00C6 (198)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter AE (Latin capital ligature AE)
< Ccedil        Ç       U+00C7 (199)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter C with cedilla
< Egrave        È       U+00C8 (200)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter E with grave accent
< Eacute        É       U+00C9 (201)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter E with acute accent
< Ecirc Ê       U+00CA (202)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter E with circumflex
< Euml  Ë       U+00CB (203)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter E with diaeresis
< Igrave        Ì       U+00CC (204)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter I with grave accent
< Iacute        Í       U+00CD (205)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter I with acute accent
< Icirc Î       U+00CE (206)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter I with circumflex
< Iuml  Ï       U+00CF (207)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter I with diaeresis
< ETH   Ð       U+00D0 (208)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter Eth
< Ntilde        Ñ       U+00D1 (209)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter N with tilde
< Ograve        Ò       U+00D2 (210)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter O with grave accent
< Oacute        Ó       U+00D3 (211)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter O with acute accent
< Ocirc Ô       U+00D4 (212)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter O with circumflex
< Otilde        Õ       U+00D5 (213)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter O with tilde
< Ouml  Ö       U+00D6 (214)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter O with diaeresis
< times ×       U+00D7 (215)    HTML 3.2        HTMLlat1        ISOnum  multiplication sign
< Oslash        Ø       U+00D8 (216)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter O with stroke (Latin capital letter O slash)
< Ugrave        Ù       U+00D9 (217)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter U with grave accent
< Uacute        Ú       U+00DA (218)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter U with acute accent
< Ucirc Û       U+00DB (219)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter U with circumflex
< Uuml  Ü       U+00DC (220)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter U with diaeresis
< Yacute        Ý       U+00DD (221)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter Y with acute accent
< THORN Þ       U+00DE (222)    HTML 2.0        HTMLlat1        ISOlat1 Latin capital letter THORN
< szlig ß       U+00DF (223)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter sharp s (ess-zed); see German Eszett
< agrave        à       U+00E0 (224)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter a with grave accent
< aacute        á       U+00E1 (225)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter a with acute accent
< acirc â       U+00E2 (226)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter a with circumflex
< atilde        ã       U+00E3 (227)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter a with tilde
< auml  ä       U+00E4 (228)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter a with diaeresis
< aring å       U+00E5 (229)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter a with ring above
< aelig æ       U+00E6 (230)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter ae (Latin small ligature ae)
< ccedil        ç       U+00E7 (231)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter c with cedilla
< egrave        è       U+00E8 (232)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter e with grave accent
< eacute        é       U+00E9 (233)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter e with acute accent
< ecirc ê       U+00EA (234)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter e with circumflex
< euml  ë       U+00EB (235)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter e with diaeresis
< igrave        ì       U+00EC (236)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter i with grave accent
< iacute        í       U+00ED (237)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter i with acute accent
< icirc î       U+00EE (238)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter i with circumflex
< iuml  ï       U+00EF (239)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter i with diaeresis
< eth   ð       U+00F0 (240)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter eth
< ntilde        ñ       U+00F1 (241)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter n with tilde
< ograve        ò       U+00F2 (242)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter o with grave accent
< oacute        ó       U+00F3 (243)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter o with acute accent
< ocirc ô       U+00F4 (244)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter o with circumflex
< otilde        õ       U+00F5 (245)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter o with tilde
< ouml  ö       U+00F6 (246)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter o with diaeresis
< divide        ÷       U+00F7 (247)    HTML 3.2        HTMLlat1        ISOnum  division sign (obelus)
< oslash        ø       U+00F8 (248)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter o with stroke (Latin small letter o slash)
< ugrave        ù       U+00F9 (249)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter u with grave accent
< uacute        ú       U+00FA (250)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter u with acute accent
< ucirc û       U+00FB (251)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter u with circumflex
< uuml  ü       U+00FC (252)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter u with diaeresis
< yacute        ý       U+00FD (253)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter y with acute accent
< thorn þ       U+00FE (254)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter thorn
< yuml  ÿ       U+00FF (255)    HTML 2.0        HTMLlat1        ISOlat1 Latin small letter y with diaeresis
< OElig Π      U+0152 (338)    HTML 4.0        HTMLspecial     ISOlat2 Latin capital ligature oe[e]
< oelig œ       U+0153 (339)    HTML 4.0        HTMLspecial     ISOlat2 Latin small ligature oe[e]
< Scaron        Š       U+0160 (352)    HTML 4.0        HTMLspecial     ISOlat2 Latin capital letter s with caron
< scaron        š       U+0161 (353)    HTML 4.0        HTMLspecial     ISOlat2 Latin small letter s with caron
< Yuml  Ÿ       U+0178 (376)    HTML 4.0        HTMLspecial     ISOlat2 Latin capital letter y with diaeresis
< fnof  ƒ       U+0192 (402)    HTML 4.0        HTMLsymbol      ISOtech Latin small letter f with hook (function, florin)
< circ  ˆ       U+02C6 (710)    HTML 4.0        HTMLspecial     ISOpub  modifier letter circumflex accent
< tilde ˜       U+02DC (732)    HTML 4.0        HTMLspecial     ISOdia  small tilde
< Alpha Α       U+0391 (913)    HTML 4.0        HTMLsymbol              Greek capital letter Alpha
< Beta  Β       U+0392 (914)    HTML 4.0        HTMLsymbol              Greek capital letter Beta
< Gamma Γ       U+0393 (915)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Gamma
< Delta Δ       U+0394 (916)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Delta
< Epsilon       Ε       U+0395 (917)    HTML 4.0        HTMLsymbol              Greek capital letter Epsilon
< Zeta  Ζ       U+0396 (918)    HTML 4.0        HTMLsymbol              Greek capital letter Zeta
< Eta   Η       U+0397 (919)    HTML 4.0        HTMLsymbol              Greek capital letter Eta
< Theta Θ       U+0398 (920)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Theta
< Iota  Ι       U+0399 (921)    HTML 4.0        HTMLsymbol              Greek capital letter Iota
< Kappa Κ       U+039A (922)    HTML 4.0        HTMLsymbol              Greek capital letter Kappa
< Lambda        Λ       U+039B (923)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Lambda
< Mu    Μ       U+039C (924)    HTML 4.0        HTMLsymbol              Greek capital letter Mu
< Nu    Ν       U+039D (925)    HTML 4.0        HTMLsymbol              Greek capital letter Nu
< Xi    Ξ       U+039E (926)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Xi
< Omicron       Ο       U+039F (927)    HTML 4.0        HTMLsymbol              Greek capital letter Omicron
< Pi    Π       U+03A0 (928)    HTML 4.0        HTMLsymbol              Greek capital letter Pi
< Rho   Ρ       U+03A1 (929)    HTML 4.0        HTMLsymbol              Greek capital letter Rho
< Sigma Σ       U+03A3 (931)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Sigma
< Tau   Τ       U+03A4 (932)    HTML 4.0        HTMLsymbol              Greek capital letter Tau
< Upsilon       Υ       U+03A5 (933)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Upsilon
< Phi   Φ       U+03A6 (934)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Phi
< Chi   Χ       U+03A7 (935)    HTML 4.0        HTMLsymbol              Greek capital letter Chi
< Psi   Ψ       U+03A8 (936)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Psi
< Omega Ω       U+03A9 (937)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek capital letter Omega
< alpha α       U+03B1 (945)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter alpha
< beta  β       U+03B2 (946)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter beta
< gamma γ       U+03B3 (947)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter gamma
< delta δ       U+03B4 (948)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter delta
< epsilon       ε       U+03B5 (949)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter epsilon
< zeta  ζ       U+03B6 (950)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter zeta
< eta   η       U+03B7 (951)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter eta
< theta θ       U+03B8 (952)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter theta
< iota  ι       U+03B9 (953)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter iota
< kappa κ       U+03BA (954)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter kappa
< lambda        λ       U+03BB (955)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter lambda
< mu    μ       U+03BC (956)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter mu
< nu    ν       U+03BD (957)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter nu
< xi    ξ       U+03BE (958)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter xi
< omicron       ο       U+03BF (959)    HTML 4.0        HTMLsymbol      NEW     Greek small letter omicron
< pi    π       U+03C0 (960)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter pi
< rho   ρ       U+03C1 (961)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter rho
< sigmaf        ς       U+03C2 (962)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter final sigma
< sigma σ       U+03C3 (963)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter sigma
< tau   τ       U+03C4 (964)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter tau
< upsilon       υ       U+03C5 (965)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter upsilon
< phi   φ       U+03C6 (966)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter phi
< chi   χ       U+03C7 (967)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter chi
< psi   ψ       U+03C8 (968)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter psi
< omega ω       U+03C9 (969)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek small letter omega
< thetasym      ϑ       U+03D1 (977)    HTML 4.0        HTMLsymbol      NEW     Greek theta symbol
< upsih ϒ       U+03D2 (978)    HTML 4.0        HTMLsymbol      NEW     Greek Upsilon with hook symbol
< piv   ϖ       U+03D6 (982)    HTML 4.0        HTMLsymbol      ISOgrk3 Greek pi symbol
< ensp          U+2002 (8194)   HTML 4.0        HTMLspecial     ISOpub  en space[d]
< emsp          U+2003 (8195)   HTML 4.0        HTMLspecial     ISOpub  em space[d]
< thinsp                U+2009 (8201)   HTML 4.0        HTMLspecial     ISOpub  thin space[d]
< zwnj          U+200C (8204)   HTML 4.0        HTMLspecial     NEW RFC 2070    zero-width non-joiner
< zwj           U+200D (8205)   HTML 4.0        HTMLspecial     NEW RFC 2070    zero-width joiner
< lrm           U+200E (8206)   HTML 4.0        HTMLspecial     NEW RFC 2070    left-to-right mark
< rlm           U+200F (8207)   HTML 4.0        HTMLspecial     NEW RFC 2070    right-to-left mark
< ndash –       U+2013 (8211)   HTML 4.0        HTMLspecial     ISOpub  en dash
< mdash —       U+2014 (8212)   HTML 4.0        HTMLspecial     ISOpub  em dash
< lsquo ‘       U+2018 (8216)   HTML 4.0        HTMLspecial     ISOnum  left single quotation mark
< rsquo ’       U+2019 (8217)   HTML 4.0        HTMLspecial     ISOnum  right single quotation mark
< sbquo ‚       U+201A (8218)   HTML 4.0        HTMLspecial     NEW     single low-9 quotation mark
< ldquo “       U+201C (8220)   HTML 4.0        HTMLspecial     ISOnum  left double quotation mark
< rdquo ”       U+201D (8221)   HTML 4.0        HTMLspecial     ISOnum  right double quotation mark
< bdquo „       U+201E (8222)   HTML 4.0        HTMLspecial     NEW     double low-9 quotation mark
< dagger        †       U+2020 (8224)   HTML 4.0        HTMLspecial     ISOpub  dagger, obelisk
< Dagger        ‡       U+2021 (8225)   HTML 4.0        HTMLspecial     ISOpub  double dagger, double obelisk
< bull  •       U+2022 (8226)   HTML 4.0        HTMLspecial     ISOpub  bullet (black small circle)[f]
< hellip        …       U+2026 (8230)   HTML 4.0        HTMLsymbol      ISOpub  horizontal ellipsis (three dot leader)
< permil        ‰       U+2030 (8240)   HTML 4.0        HTMLspecial     ISOtech per mille sign
< prime ′       U+2032 (8242)   HTML 4.0        HTMLsymbol      ISOtech prime (minutes, feet)
< Prime ″       U+2033 (8243)   HTML 4.0        HTMLsymbol      ISOtech double prime (seconds, inches)
< lsaquo        ‹       U+2039 (8249)   HTML 4.0        HTMLspecial     ISO proposed    single left-pointing angle quotation mark[g]
< rsaquo        ›       U+203A (8250)   HTML 4.0        HTMLspecial     ISO proposed    single right-pointing angle quotation mark[g]
< oline ‾       U+203E (8254)   HTML 4.0        HTMLsymbol      NEW     overline (spacing overscore)
< frasl ⁄       U+2044 (8260)   HTML 4.0        HTMLsymbol      NEW     fraction slash (solidus)
< euro  €       U+20AC (8364)   HTML 4.0        HTMLspecial     NEW     euro sign
< image ℑ       U+2111 (8465)   HTML 4.0        HTMLsymbol      ISOamso black-letter capital I (imaginary part)
< weierp        ℘       U+2118 (8472)   HTML 4.0        HTMLsymbol      ISOamso script capital P (power set, Weierstrass p)
< real  ℜ       U+211C (8476)   HTML 4.0        HTMLsymbol      ISOamso black-letter capital R (real part symbol)
< trade ™       U+2122 (8482)   HTML 4.0        HTMLsymbol      ISOnum  trademark symbol
< alefsym       ℵ       U+2135 (8501)   HTML 4.0        HTMLsymbol      NEW     alef symbol (first transfinite cardinal)[h]
< larr  ←       U+2190 (8592)   HTML 4.0        HTMLsymbol      ISOnum  leftwards arrow
< uarr  ↑       U+2191 (8593)   HTML 4.0        HTMLsymbol      ISOnum  upwards arrow
< rarr  →       U+2192 (8594)   HTML 4.0        HTMLsymbol      ISOnum  rightwards arrow
< darr  ↓       U+2193 (8595)   HTML 4.0        HTMLsymbol      ISOnum  downwards arrow
< harr  ↔       U+2194 (8596)   HTML 4.0        HTMLsymbol      ISOamsa left right arrow
< crarr ↵       U+21B5 (8629)   HTML 4.0        HTMLsymbol      NEW     downwards arrow with corner leftwards (carriage return)
< lArr  ⇐       U+21D0 (8656)   HTML 4.0        HTMLsymbol      ISOtech leftwards double arrow[i]
< uArr  ⇑       U+21D1 (8657)   HTML 4.0        HTMLsymbol      ISOamsa upwards double arrow
< rArr  ⇒       U+21D2 (8658)   HTML 4.0        HTMLsymbol      ISOnum  rightwards double arrow[j]
< dArr  ⇓       U+21D3 (8659)   HTML 4.0        HTMLsymbol      ISOamsa downwards double arrow
< hArr  ⇔       U+21D4 (8660)   HTML 4.0        HTMLsymbol      ISOamsa left right double arrow
< forall        ∀       U+2200 (8704)   HTML 4.0        HTMLsymbol      ISOtech for all
< part  ∂       U+2202 (8706)   HTML 4.0        HTMLsymbol      ISOtech partial differential
< exist ∃       U+2203 (8707)   HTML 4.0        HTMLsymbol      ISOtech there exists
< empty ∅       U+2205 (8709)   HTML 4.0        HTMLsymbol      ISOamso empty set (null set); see also U+8960, ⌀
< nabla ∇       U+2207 (8711)   HTML 4.0        HTMLsymbol      ISOtech del or nabla (vector differential operator)
< isin  ∈       U+2208 (8712)   HTML 4.0        HTMLsymbol      ISOtech element of
< notin ∉       U+2209 (8713)   HTML 4.0        HTMLsymbol      ISOtech not an element of
< ni    ∋       U+220B (8715)   HTML 4.0        HTMLsymbol      ISOtech contains as member
< prod  ∏       U+220F (8719)   HTML 4.0        HTMLsymbol      ISOamsb n-ary product (product sign)[k]
< sum   ∑       U+2211 (8721)   HTML 4.0        HTMLsymbol      ISOamsb n-ary summation[l]
< minus −       U+2212 (8722)   HTML 4.0        HTMLsymbol      ISOtech minus sign
< lowast        ∗       U+2217 (8727)   HTML 4.0        HTMLsymbol      ISOtech asterisk operator
< radic √       U+221A (8730)   HTML 4.0        HTMLsymbol      ISOtech square root (radical sign)
< prop  ∝       U+221D (8733)   HTML 4.0        HTMLsymbol      ISOtech proportional to
< infin ∞       U+221E (8734)   HTML 4.0        HTMLsymbol      ISOtech infinity
< ang   ∠       U+2220 (8736)   HTML 4.0        HTMLsymbol      ISOamso angle
< and   ∧       U+2227 (8743)   HTML 4.0        HTMLsymbol      ISOtech logical and (wedge)
< or    ∨       U+2228 (8744)   HTML 4.0        HTMLsymbol      ISOtech logical or (vee)
< cap   ∩       U+2229 (8745)   HTML 4.0        HTMLsymbol      ISOtech intersection (cap)
< cup   ∪       U+222A (8746)   HTML 4.0        HTMLsymbol      ISOtech union (cup)
< int   ∫       U+222B (8747)   HTML 4.0        HTMLsymbol      ISOtech integral
< there4        ∴       U+2234 (8756)   HTML 4.0        HTMLsymbol      ISOtech therefore sign
< sim   ∼       U+223C (8764)   HTML 4.0        HTMLsymbol      ISOtech tilde operator (varies with, similar to)[m]
< cong  ≅       U+2245 (8773)   HTML 4.0        HTMLsymbol      ISOtech congruent to
< asymp ≈       U+2248 (8776)   HTML 4.0        HTMLsymbol      ISOamsr almost equal to (asymptotic to)
< ne    ≠       U+2260 (8800)   HTML 4.0        HTMLsymbol      ISOtech not equal to
< equiv ≡       U+2261 (8801)   HTML 4.0        HTMLsymbol      ISOtech identical to; sometimes used for 'equivalent to'
< le    ≤       U+2264 (8804)   HTML 4.0        HTMLsymbol      ISOtech less-than or equal to
< ge    ≥       U+2265 (8805)   HTML 4.0        HTMLsymbol      ISOtech greater-than or equal to
< sub   ⊂       U+2282 (8834)   HTML 4.0        HTMLsymbol      ISOtech subset of
< sup   ⊃       U+2283 (8835)   HTML 4.0        HTMLsymbol      ISOtech superset of[n]
< nsub  ⊄       U+2284 (8836)   HTML 4.0        HTMLsymbol      ISOamsn not a subset of
< sube  ⊆       U+2286 (8838)   HTML 4.0        HTMLsymbol      ISOtech subset of or equal to
< supe  ⊇       U+2287 (8839)   HTML 4.0        HTMLsymbol      ISOtech superset of or equal to
< oplus ⊕       U+2295 (8853)   HTML 4.0        HTMLsymbol      ISOamsb circled plus (direct sum)
< otimes        ⊗       U+2297 (8855)   HTML 4.0        HTMLsymbol      ISOamsb circled times (vector product)
< perp  ⊥       U+22A5 (8869)   HTML 4.0        HTMLsymbol      ISOtech up tack (orthogonal to, perpendicular)[o]
< sdot  ⋅       U+22C5 (8901)   HTML 4.0        HTMLsymbol      ISOamsb dot operator[p]
< lceil ⌈       U+2308 (8968)   HTML 4.0        HTMLsymbol      ISOamsc left ceiling (APL upstile)
< rceil ⌉       U+2309 (8969)   HTML 4.0        HTMLsymbol      ISOamsc right ceiling
< lfloor        ⌊       U+230A (8970)   HTML 4.0        HTMLsymbol      ISOamsc left floor (APL downstile)
< rfloor        ⌋       U+230B (8971)   HTML 4.0        HTMLsymbol      ISOamsc right floor
< lang  〈      U+2329 (9001)   HTML 4.0        HTMLsymbol      ISOtech left-pointing angle bracket (bra)[q]
< rang  〉      U+232A (9002)   HTML 4.0        HTMLsymbol      ISOtech right-pointing angle bracket (ket)[r]
< loz   ◊       U+25CA (9674)   HTML 4.0        HTMLsymbol      ISOpub  lozenge
< spades        ♠       U+2660 (9824)   HTML 4.0        HTMLsymbol      ISOpub  black spade suit[f]
< clubs ♣       U+2663 (9827)   HTML 4.0        HTMLsymbol      ISOpub  black club suit (shamrock)[f]
< hearts        ♥       U+2665 (9829)   HTML 4.0        HTMLsymbol      ISOpub  black heart suit (valentine)[f]
< diams ♦       U+2666 (9830)   HTML 4.0        HTMLsymbol      ISOpub  black diamond suit[f]

---
> Name  Character       Unicode code point (decimal)    Standard        ISOnum  XHTML 1.0       nbsp
> quot  "       U+0022 (34)             U+00A0 (160)    HTML 3.2        HTMLlat1
> &     U+0026 (38)     ampersand               U+00A0 (160)    HTML 3.2        apos
> '     U+0027 (39)     lt      iexcl   U+00A0 (160)    HTML 3.2        ¡
> U+003C (60)   less-than sign  gt              U+00A0 (160)    HTML 3.2        >
> U+003E (62)   greater-than sign       HTML 2.0                U+00A0 (160)    HTML 3.2        HTMLspecial
> U+00A1 (161)  inverted exclamation mark       cent    ¢       U+00A2 (162)    HTML 3.2        cent sign
> pound £       U+00A3 (163)    ¢       U+00A2 (162)    HTML 3.2        pound sign
> curren        ¤       U+00A4 (164)    ¢       U+00A2 (162)    HTML 3.2        currency sign
> yen   ¥       U+00A5 (165)    ¢       U+00A2 (162)    HTML 3.2        brvbar
> ¦     U+00A6 (166)    broken bar (broken vertical bar)        ¢       U+00A2 (162)    HTML 3.2        sect
> §     U+00A7 (167)    section sign    ¢       U+00A2 (162)    HTML 3.2        uml
> ¨     U+00A8 (168)    ISOdia  ¢       U+00A2 (162)    HTML 3.2        copy
> ©     U+00A9 (169)    copyright symbol        ¢       U+00A2 (162)    HTML 3.2        ordf
> ª     U+00AA (170)    laquo   ¢       U+00A2 (162)    «       U+00AB (171)
> not   ¬       U+00AC (172)    ¢       U+00A2 (162)    HTML 3.2        not sign
> shy   U+00AD (173)    reg     ¢       U+00A2 (162)    HTML 3.2        ®
> U+00AE (174)  macr    ¯       ¢       U+00A2 (162)    HTML 3.2        U+00AF (175)
> deg   °       U+00B0 (176)    ¢       U+00A2 (162)    HTML 3.2        degree symbol
> plusmn        inverted exclamation mark       ±       ¢       U+00A2 (162)    HTML 3.2        U+00B1 (177)
> sup2  ²       U+00B2 (178)    ¢       U+00A2 (162)    HTML 3.2        superscript two (superscript digit two, squared)
> sup3  ³       U+00B3 (179)    ¢       U+00A2 (162)    «       superscript three (superscript digit three, cubed)
> acute ´       U+00B4 (180)    ¢       U+00A2 (162)    HTML 3.2        micro
> µ     U+00B5 (181)    micro sign      ¢       U+00A2 (162)    HTML 3.2        para
> ¶     U+00B6 (182)    middot  ¢       U+00A2 (162)    HTML 3.2        ·
> U+00B7 (183)  cedil   ¸       ¢       U+00A2 (162)    HTML 3.2        U+00B8 (184)
> sup1  ¹       U+00B9 (185)    ¢       U+00A2 (162)    «       superscript one (superscript digit one)
> ordm  º       U+00BA (186)    ¢       U+00A2 (162)    HTML 3.2        raquo
> »     U+00BB (187)    right-pointing double angle quotation mark (right pointing guillemet)   ¢       U+00A2 (162)    HTML 3.2        frac14
> ¼     U+00BC (188)    vulgar fraction one quarter (fraction one quarter)      ¢       U+00A2 (162)    HTML 3.2        frac12
> ½     U+00BD (189)    vulgar fraction one half (fraction one half)    ¢       U+00A2 (162)    «       frac34
> ¾     U+00BE (190)    vulgar fraction three quarters (fraction three quarters)        ¢       U+00A2 (162)    HTML 3.2        iquest
> ¿     U+00BF (191)    Agrave  ¢       U+00A2 (162)    HTML 3.2        À
> U+00C0 (192)  ISOlat1 Aacute  ¢       U+00A2 (162)    HTML 3.2        Á
> U+00C1 (193)  Acirc   Â       ¢       U+00A2 (162)    HTML 3.2        U+00C2 (194)
> Atilde        Ã       U+00C3 (195)    ¢       U+00A2 (162)    HTML 3.2        Auml
> Ä     U+00C4 (196)    Aring   ¢       U+00A2 (162)    HTML 3.2        Å
> U+00C5 (197)  Latin capital letter A with ring above (Latin capital letter A ring)    AElig   ¢       U+00A2 (162)    HTML 3.2        Æ
> U+00C6 (198)  Latin capital letter AE (Latin capital ligature AE)     Ccedil          U+00A2 (162)    Ç       U+00C7 (199)
> Egrave        È       U+00C8 (200)            U+00A2 (162)    Ç       Eacute
> É     U+00C9 (201)    Ecirc           U+00A2 (162)    Ç       Ê
> U+00CA (202)  Euml    Ë               U+00A2 (162)    Ç       U+00CB (203)
> Igrave        Ì       U+00CC (204)            U+00A2 (162)    Ç       Iacute
> Í     U+00CD (205)    Icirc           U+00A2 (162)    Ç       Î
> U+00CE (206)  Iuml    Ï               U+00A2 (162)    Ç       U+00CF (207)
> ETH   Ð       U+00D0 (208)            U+00A2 (162)    Ç       Ntilde
> Ñ     U+00D1 (209)    Ograve          U+00A2 (162)    Ç       Ò
> U+00D2 (210)  Oacute  Ó               U+00A2 (162)    Ç       U+00D3 (211)
> Ocirc Ô       U+00D4 (212)            U+00A2 (162)    Ç       Otilde
> Õ     U+00D5 (213)    Ouml            U+00A2 (162)    Ç       Ö
> U+00D6 (214)  times   ×               U+00A2 (162)    Ç       U+00D7 (215)
> multiplication sign   Oslash  Ø               U+00A2 (162)    Ç       U+00D8 (216)
> Latin capital letter O with stroke (Latin capital letter O slash)     Ugrave  Ù               U+00A2 (162)    Ç       U+00D9 (217)
> Uacute        Ú       U+00DA (218)            U+00A2 (162)    Ç       Ucirc
> Û     U+00DB (219)    Uuml            U+00A2 (162)    Ç       Ü
> U+00DC (220)  Yacute  Ý               U+00A2 (162)    Ç       U+00DD (221)
> THORN Þ       U+00DE (222)            U+00A2 (162)    Ç       szlig
> ß     U+00DF (223)    agrave          U+00A2 (162)    Ç       à
> U+00E0 (224)  aacute  á               U+00A2 (162)    Ç       U+00E1 (225)
> acirc â       U+00E2 (226)            U+00A2 (162)    Ç       atilde
> ã     U+00E3 (227)    auml            U+00A2 (162)    Ç       ä
> U+00E4 (228)  aring   å       ¢       U+00A2 (162)    HTML 3.2        U+00E5 (229)
> Latin small letter a with ring above  aelig   æ               U+00A2 (162)    Ç       U+00E6 (230)
> Latin small letter ae (Latin small ligature ae)       ccedil  ç               U+00A2 (162)    Ç       U+00E7 (231)
> egrave        è       U+00E8 (232)            U+00A2 (162)    Ç       eacute
> é     U+00E9 (233)    ecirc           U+00A2 (162)    Ç       ê
> U+00EA (234)  euml    ë               U+00A2 (162)    Ç       U+00EB (235)
> igrave        ì       U+00EC (236)            U+00A2 (162)    Ç       iacute
> í     U+00ED (237)    icirc           U+00A2 (162)    Ç       î
> U+00EE (238)  iuml    ï               U+00A2 (162)    Ç       U+00EF (239)
> eth   ð       U+00F0 (240)            U+00A2 (162)    Ç       ntilde
> ñ     U+00F1 (241)    ograve          U+00A2 (162)    Ç       ò
> U+00F2 (242)  oacute  ó               U+00A2 (162)    Ç       U+00F3 (243)
> ocirc ô       U+00F4 (244)            U+00A2 (162)    Ç       otilde
> õ     U+00F5 (245)    ouml            U+00A2 (162)    Ç       ö
> U+00F6 (246)  divide  ÷               U+00A2 (162)    Ç       U+00F7 (247)
> oslash        ø       U+00F8 (248)            U+00A2 (162)    Ç       Latin small letter o with stroke (Latin small letter o slash)
> ugrave        ù       U+00F9 (249)            U+00A2 (162)    Ç       uacute
> ú     U+00FA (250)    ucirc           U+00A2 (162)    Ç       û
> U+00FB (251)  uuml    ü               U+00A2 (162)    Ç       U+00FC (252)
> yacute        ý       U+00FD (253)            U+00A2 (162)    Ç       thorn
> þ     U+00FE (254)    yuml            U+00A2 (162)    Ç       ÿ
> U+00FF (255)  OElig   Œ               U+00A2 (162)    Ç       U+0152 (338)
> HTML 4.0      ISOlat2 oelig           U+00A2 (162)    Ç       œ
> U+0153 (339)  Scaron  Š               U+00A2 (162)    Ç       U+0160 (352)
> scaron        š       U+0161 (353)            U+00A2 (162)    Ç       Yuml
> Ÿ     U+0178 (376)    fnof            U+00A2 (162)    Ç       ƒ
> U+0192 (402)  HTMLsymbol      ISOtech         U+00A2 (162)    Ç       circ
> ˆ     U+02C6 (710)    ISOpub          U+00A2 (162)    Ç       tilde
> ˜     U+02DC (732)    Alpha           U+00A2 (162)    Ç       Α
> U+0391 (913)  Greek capital letter Alpha      Beta            U+00A2 (162)    Ç       Β
> U+0392 (914)  Greek capital letter Beta       Gamma           U+00A2 (162)    Ç       Γ
> U+0393 (915)  ISOgrk3 Greek capital letter Gamma              U+00A2 (162)    Ç       Delta
> Δ     U+0394 (916)    Greek capital letter Delta      ¢       U+00A2 (162)    HTML 3.2        Epsilon
> Ε     U+0395 (917)    Greek capital letter Epsilon            U+00A2 (162)    Ç       Zeta
> Ζ     U+0396 (918)    Greek capital letter Zeta               U+00A2 (162)    Ç       Eta
> Η     U+0397 (919)    Greek capital letter Eta                U+00A2 (162)    Ç       Theta
> Θ     U+0398 (920)    Greek capital letter Theta              U+00A2 (162)    Ç       Iota
> Ι     U+0399 (921)    Greek capital letter Iota               U+00A2 (162)    Ç       Kappa
> Κ     U+039A (922)    Greek capital letter Kappa              U+00A2 (162)    Ç       Lambda
> Λ     U+039B (923)    Greek capital letter Lambda             U+00A2 (162)    Ç       Mu
> Μ     U+039C (924)    Greek capital letter Mu         U+00A2 (162)    Ç       Nu
> Ν     U+039D (925)    Greek capital letter Nu Xi      U+00A0 (160)    Ξ       U+039E (926)
> Greek capital letter Xi       Omicron Ο       Xi      U+00A0 (160)    Ξ       U+039F (927)
> Greek capital letter Omicron  Pi      Π       Xi      U+00A0 (160)    Ξ       U+03A0 (928)
> Greek capital letter Pi       Rho     Ρ       Xi      U+00A0 (160)    Ξ       U+03A1 (929)
> Greek capital letter Rho      Sigma   Σ       Xi      U+00A0 (160)    Ξ       U+03A3 (931)
> Greek capital letter Sigma    Tau     Τ       Xi      U+03A4 (932)    Greek capital letter Tau        Upsilon
> Υ     U+03A5 (933)    Greek capital letter Upsilon    Xi      U+00A0 (160)    Phi     Φ
> U+03A6 (934)  Greek capital letter Phi        Chi     Xi      U+00A0 (160)    «       Χ
> U+03A7 (935)  Greek capital letter Chi        Psi     Xi      U+03A4 (932)    Ψ
> U+03A8 (936)  Greek capital letter Psi        Omega   Xi      U+03A4 (932)    Ω
> U+03A9 (937)  Greek capital letter Omega      alpha   Xi      U+03A4 (932)    α       U+03B1 (945)
> Greek small letter alpha      beta    β       Xi      U+03A4 (932)    α       U+03B2 (946)
> Greek small letter beta       gamma   γ       Xi      U+03A4 (932)    U+03B3 (947)
> Greek small letter gamma      delta   δ       Xi      U+03A4 (932)    U+03B4 (948)
> Greek small letter delta      epsilon ε       Xi      U+03A4 (932)    U+03B5 (949)
> Greek small letter epsilon    zeta    ζ       Xi      U+03A4 (932)    α       U+03B6 (950)
> Greek small letter zeta       eta     η       Xi      U+03A4 (932)    U+03B7 (951)
> Greek small letter eta        theta   θ       Xi      U+03A4 (932)    U+03B8 (952)
> Greek small letter theta      iota    ι       Xi      U+03A4 (932)    α       U+03B9 (953)
> Greek small letter iota       kappa   κ       Xi      U+03A4 (932)    U+03BA (954)
> Greek small letter kappa      lambda  λ       Xi      U+03A4 (932)    U+03BB (955)
> Greek small letter lambda     mu      μ       Xi      U+03A4 (932)    α       U+03BC (956)
> Greek small letter mu nu      ν       Xi      U+03A4 (932)    U+03BD (957)
> Greek small letter nu xi      ξ       Xi      U+03A4 (932)    U+03BE (958)
> Greek small letter xi omicron ο       Xi      U+03A4 (932)    U+03BF (959)
> NEW   Greek small letter omicron      pi      Xi      U+03A4 (932)    α       π
> U+03C0 (960)  Greek small letter pi   rho     Xi      U+03A4 (932)    ρ
> U+03C1 (961)  Greek small letter rho  sigmaf  Xi      U+03A4 (932)    α       ς
> U+03C2 (962)  Greek small letter final sigma  sigma   Xi      U+03A4 (932)    α       σ
> U+03C3 (963)  Greek small letter sigma        tau     Xi      U+03A4 (932)    τ
> U+03C4 (964)  Greek small letter tau  upsilon Xi      U+03A4 (932)    α       υ
> U+03C5 (965)  Greek small letter upsilon      phi     Xi      U+03A4 (932)    α       φ
> U+03C6 (966)  Greek small letter phi  chi     Xi      U+03A4 (932)    α       χ
> U+03C7 (967)  Greek small letter chi  psi     Xi      U+03A4 (932)    α       ψ
> U+03C8 (968)  Greek small letter psi  omega   Xi      U+03A4 (932)    α       ω
> U+03C9 (969)  Greek small letter omega        thetasym        Xi      U+03A4 (932)    α       ϑ
> U+03D1 (977)  Greek theta symbol      upsih   Xi      U+03A4 (932)    α       ϒ
> U+03D2 (978)  Greek Upsilon with hook symbol  piv     Xi      U+03A4 (932)    α       ϖ
> U+03D6 (982)  Greek pi symbol ensp    Xi      U+03A4 (932)    α        
> U+2002 (8194) en space[d]     emsp    Xi      U+03A4 (932)    α        
> U+2003 (8195) em space[d]     thinsp  Xi      U+03A4 (932)    α        
> U+2009 (8201) thin space[d]   zwnj    Xi      U+03A4 (932)    α       U+200C (8204)
> zero-width non-joiner zwj     U+200D (8205)   Xi      U+03A4 (932)    α       zero-width joiner
> lrm   U+200E (8206)   left-to-right mark      Xi      U+03A4 (932)    α       rlm
> U+200F (8207) right-to-left mark      ndash   Xi      U+03A4 (932)    α       –
> U+2013 (8211) en dash mdash   Xi      U+03A4 (932)    α       —
> U+2014 (8212) em dash lsquo   Xi      U+03A4 (932)    ‘       U+2018 (8216)
> rsquo ’       U+2019 (8217)   Xi      U+03A4 (932)    α       sbquo
> ‚     U+201A (8218)   ldquo   Xi      U+03A4 (932)    α       “
> U+201C (8220) rdquo   ”       Xi      U+03A4 (932)    α       U+201D (8221)
> bdquo „       U+201E (8222)   Xi      U+03A4 (932)    α       dagger
> †     U+2020 (8224)   dagger, obelisk Xi      U+03A4 (932)    α       Dagger
> ‡     U+2021 (8225)   double dagger, double obelisk   Xi      U+03A4 (932)    α       bull
> •     U+2022 (8226)   hellip  Xi      U+03A4 (932)    α       …
> U+2026 (8230) permil  ‰       Xi      U+03A4 (932)    α       U+2030 (8240)
> prime ′       U+2032 (8242)   Xi      U+03A4 (932)    α       Prime
> ″     U+2033 (8243)   lsaquo  Xi      U+03A4 (932)    α       ‹
> U+2039 (8249) ISO proposed    rsaquo  Xi      U+03A4 (932)    ‘       ›
> U+203A (8250) oline   ‾       Xi      U+03A4 (932)    ‘       U+203E (8254)
> frasl ⁄       U+2044 (8260)   Xi      U+03A4 (932)    α       euro
> €     U+20AC (8364)   euro sign       Xi      U+00A0 (160)    Phi     image
> ℑ     U+2111 (8465)   ISOamso Xi      U+00A0 (160)    Phi     black-letter capital I (imaginary part)
> weierp        ℘       U+2118 (8472)   Xi      U+00A0 (160)    Phi     real
> ℜ     inverted exclamation mark       U+211C (8476)   Xi      U+00A0 (160)    black-letter capital R (real part symbol)       trade
> ™     inverted exclamation mark       U+2122 (8482)   Xi      U+00A0 (160)    black-letter capital R (real part symbol)       trademark symbol
> alefsym       inverted exclamation mark       ℵ       Xi      U+00A0 (160)    black-letter capital R (real part symbol)       U+2135 (8501)
> larr  inverted exclamation mark       ←       Xi      U+00A0 (160)    black-letter capital R (real part symbol)       U+2190 (8592)
> leftwards arrow       uarr    ↑       Xi      U+00A0 (160)    Phi     U+2191 (8593)
> upwards arrow rarr    →       Xi      U+00A0 (160)    Phi     U+2192 (8594)
> rightwards arrow      darr    ↓       Xi      U+00A0 (160)    HTML 3.2        U+2193 (8595)
> downwards arrow       harr    ↔       Xi      U+00A0 (160)    HTML 3.2        U+2194 (8596)
> ISOamsa       left right arrow        crarr   Xi      U+00A0 (160)    ‘       ↵
> U+21B5 (8629) downwards arrow with corner leftwards (carriage return) lArr    Xi      U+00A0 (160)    HTML 3.2        ⇐
> U+21D0 (8656) uArr    ⇑       Xi      U+00A0 (160)    HTML 3.2        U+21D1 (8657)
> upwards double arrow  rArr    ⇒       Xi      U+00A0 (160)    ‘       U+21D2 (8658)
> dArr  ⇓       U+21D3 (8659)   Xi      U+00A0 (160)    Phi     downwards double arrow
> hArr  ⇔       U+21D4 (8660)   Xi      U+00A0 (160)    Phi     left right double arrow
> forall        ∀       U+2200 (8704)   Xi      U+00A0 (160)    Phi     for all
> part  ∂       U+2202 (8706)   Xi      U+03A4 (932)    Phi     partial differential
> exist ∃       U+2203 (8707)   Xi      U+00A0 (160)    Greek capital letter Tau        there exists
> empty ∅       U+2205 (8709)   Xi      U+03A4 (932)    Greek capital letter Tau        nabla
> ∇     U+2207 (8711)   isin    Xi      U+03A4 (932)    Greek capital letter Tau        ∈
> U+2208 (8712) element of      notin   Xi      U+00A0 (160)    ∉       U+2209 (8713)
> not an element of     ni      ∋       Xi      U+00A0 (160)    ∉       U+220B (8715)
> contains as member    prod    ∏       Xi      U+03A4 (932)    ‘       U+220F (8719)
> ISOamsb       sum     ∑       Xi      U+03A4 (932)    ‘       U+2211 (8721)
> n-ary summation[l]    minus   −       Xi      U+00A0 (160)    ‘       U+2212 (8722)
> minus sign    lowast  ∗       Xi      U+03A4 (932)    U+2217 (8727)   asterisk operator
> radic √       U+221A (8730)   Xi      U+03A4 (932)    U+2217 (8727)   prop
> ∝     U+221D (8733)   proportional to Xi      U+03A4 (932)    U+2217 (8727)   infin
> ∞     U+221E (8734)   infinity        Xi      U+03A4 (932)    HTML 3.2        ang
> ∠     U+2220 (8736)   angle   Xi      U+03A4 (932)    ‘       and
> ∧     U+2227 (8743)   or      Xi      U+03A4 (932)    HTML 3.2        ∨
> U+2228 (8744) cap     ∩       Xi      U+03A4 (932)    HTML 3.2        U+2229 (8745)
> cup   ∪       U+222A (8746)   Xi      U+03A4 (932)    HTML 3.2        int
> ∫     U+222B (8747)   integral        Xi      U+03A4 (932)    HTML 3.2        there4
> ∴     U+2234 (8756)   therefore sign  Xi      U+03A4 (932)    sim     ∼
> U+223C (8764) cong    ≅       Xi      U+03A4 (932)    ‘       U+2245 (8773)
> congruent to  asymp   ≈       Xi      U+03A4 (932)    Greek capital letter Tau        U+2248 (8776)
> ISOamsr       almost equal to (asymptotic to) ne      Xi      U+03A4 (932)    sim     ≠
> U+2260 (8800) not equal to    equiv   Xi      U+03A4 (932)    HTML 3.2        ≡
> U+2261 (8801) identical to; sometimes used for 'equivalent to'        le      Xi      U+03A4 (932)    sim     ≤
> U+2264 (8804) less-than or equal to   ge      Xi      U+03A4 (932)    sim     ≥
> U+2265 (8805) greater-than or equal to        sub     Xi      U+03A4 (932)    Greek capital letter Tau        ⊂
> U+2282 (8834) subset of       sup     Xi      U+03A4 (932)    Greek capital letter Tau        ⊃
> U+2283 (8835) nsub    ⊄       Xi      U+03A4 (932)    Greek capital letter Tau        U+2284 (8836)
> ISOamsn       not a subset of sube    Xi      U+03A4 (932)    U+2217 (8727)   ⊆
> U+2286 (8838) subset of or equal to   supe    Xi      U+03A4 (932)    Greek capital letter Tau        ⊇
> U+2287 (8839) superset of or equal to oplus   Xi      U+03A4 (932)    Greek capital letter Tau        ⊕
> U+2295 (8853) circled plus (direct sum)       otimes  Xi      U+03A4 (932)    Greek capital letter Tau        ⊗
> U+2297 (8855) circled times (vector product)  perp    Xi      U+03A4 (932)    Greek capital letter Tau        ⊥
> U+22A5 (8869) sdot    ⋅       Xi      U+03A4 (932)    U+22C5 (8901)   lceil
> ⌈     U+2308 (8968)   ISOamsc Xi      U+03A4 (932)    U+22C5 (8901)   left ceiling (APL upstile)
> rceil ⌉       U+2309 (8969)   Xi      U+03A4 (932)    Greek capital letter Tau        right ceiling
> lfloor        ⌊       U+230A (8970)   Xi      U+03A4 (932)    Greek capital letter Tau        left floor (APL downstile)
> rfloor        ⌋       U+230B (8971)   Xi      U+03A4 (932)    Greek capital letter Tau        right floor
> lang  〈      U+2329 (9001)   Xi      U+03A4 (932)    Greek capital letter Tau        rang
> 〉    U+232A (9002)   loz     Xi      U+03A4 (932)    Greek capital letter Tau        ◊
> U+25CA (9674) lozenge spades  Xi      U+03A4 (932)    U+2217 (8727)   ♠
> U+2660 (9824) black spade suit[f]     clubs   Xi      U+03A4 (932)    Greek capital letter Tau        ♣
> U+2663 (9827) hearts  ♥       Xi      U+03A4 (932)    Greek capital letter Tau        U+2665 (9829)
> diams ♦       U+2666 (9830)   Xi      U+03A4 (932)    Greek capital letter Tau        black diamond suit[f]
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    U+22C5 (8901)
>                       Xi      U+03A4 (932)    U+22C5 (8901)
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    U+22C5 (8901)
>                       Xi      U+03A4 (932)
>                       Xi      U+03A4 (932)
>                       Xi      U+03A4 (932)
>                       Xi      U+03A4 (932)
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Greek capital letter Tau
>                       Xi      U+03A4 (932)    Phi
>                       Xi      U+03A4 (932)    Phi
>                       Xi      U+03A4 (932)    Phi
>                       Xi      U+03A4 (932)    Phi
>                       Xi      U+03A4 (932)    Phi

Enh: Convert only a range of cells

Many spreadsheets have some header rows describing the sheet information, and occasionally some trailer rows with version information or counts/sums.
It might be convenient to to convert to CSV just an specific range of cells in order to exclude these header/trailer rows.

Memory leaks vulneribility in main when use calloc and mz_zip_extract_archive_file_to_heap

Test Version

dev version,git clone https://github.com/vpaesa/cxlsx_to_csv

Command and argument

./cxlsx_to_csv_test ./cxlsx_to_csv_test -if crash_sample -of test.csv

Crash Information

The output of cxlsx_to_csv with address sanitizer enabled

./cxlsx_to_csv_test ./cxlsx_to_csv_test -if crash_sample -of test.csv
=================================================================
==51423==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 41032 byte(s) in 1 object(s) allocated from:
    #0 0x7fa9f9e8b79a in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x9879a)
    #1 0x42d90a in main /home/dawn/cxlsx_to_csv-master/cxlsx_to_csv.c:772
    #2 0x7fa9f9a4982f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)

Direct leak of 1751 byte(s) in 1 object(s) allocated from:
    #0 0x7fa9f9e8b602 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x98602)
    #1 0x401d4f in def_alloc_func /home/dawn/cxlsx_to_csv-master/miniz.c:1010
    #2 0x4245aa in mz_zip_reader_extract_to_heap /home/dawn/cxlsx_to_csv-master/miniz.c:3704
    #3 0x42d791 in mz_zip_extract_archive_file_to_heap /home/dawn/cxlsx_to_csv-master/miniz.c:4873
    #4 0x42e005 in main /home/dawn/cxlsx_to_csv-master/cxlsx_to_csv.c:887
    #5 0x7fa9f9a4982f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)

SUMMARY: AddressSanitizer: 42783 byte(s) leaked in 2 allocation(s).

POC file

crash_sample.zip

CREDIT

pu!m,Huawei Weiran Labs

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.