docs: def fromcsvstring(cls, csvstring, delimiter=",", quotechar="\""):
          """
          Takes one string that represents the entire contents of the CSV
          file, or similar delimited file.
  
          If you have a list of lists, where the first list is the headers,
          then use the main constructor.
  
          If you see an excess of whitespace in the first column of your data,
          this is probably because you tried to format a triple-quoted string
          literal nicely. Don't add any padding to the left.
  
          NOTE: Please prefix your triple-quoted string literal with `u` or `ur`
          as necessary. For copy-pasting directly from Excel, use `ur`. For
          copy-pasting from something Python (or similar) printed, use `ur`.
          For something just dumped from Python via __repr__ or some other
          text source that displays escape characters used, use `u`.
  
          ---
  
          Implementation notes:
  
          This solution was inspired by UnicodeRW.
          cStringIO.StringIO turns the passed string into a file-like
          (readble) object. The string must be encoded so that StringIO
          presents encoded text.
  
          In UnicodeRW, codecs.getreader('utf-8') reads an encoded file object
          to product a decoded file object on the fly. We don't need this.
  
          We read the StringIO object line by line into csv.reader,
          which is consumes encoded text and parses the CSV format out of it.
          Then we decode each cell one by one as we pass it into the data table
  
          csv.QUOTE_NONE (as well as the r-prefix on r'''string''') are vital
          since we're copy-pasting directly from Excel. The string should be
          treated as "literally" ("raw") as possible.
          """
          if not isinstance(csvstring, basestring):
              raise Exception("If trying to construct a DataTable with "
                              "a list of lists, just use the main "
                              "constructor. Make sure to include a header row")
  
          stringio = StringIO(csvstring.encode('utf-8'))
          csv_data = csv.reader((line for line in stringio),
                                delimiter=delimiter,
                                dialect=csv.excel,
                                quotechar=quotechar,
                                quoting=csv.QUOTE_NONE)
          new_datatable = cls((s.decode('utf-8') for s in row)
                              for row in csv_data)
          for field in new_datatable.fields:
              new_datatable[field] = parse_column(new_datatable[field])
          return new_datatable