code: public static CharSequence unescapeCsv(CharSequence value) {
          int length = checkNotNull(value, "value").length();
          if (length == 0) {
              return value;
          }
          int last = length - 1;
          boolean quoted = isDoubleQuote(value.charAt(0)) && isDoubleQuote(value.charAt(last)) && length != 1;
          if (!quoted) {
              validateCsvFormat(value);
              return value;
          }
          StringBuilder unescaped = InternalThreadLocalMap.get().stringBuilder();
          for (int i = 1; i < last; i++) {
              char current = value.charAt(i);
              if (current == DOUBLE_QUOTE) {
                  if (isDoubleQuote(value.charAt(i + 1)) && (i + 1) != last) {
                      // Followed by a double-quote but not the last character
                      // Just skip the next double-quote
                      i++;
                  } else {
                      // Not followed by a double-quote or the following double-quote is the last character
                      throw newInvalidEscapedCsvFieldException(value, i);
                  }
              }
              unescaped.append(current);
          }
          return unescaped.toString();
      }
docs: Unescapes the specified escaped CSV field, if necessary according to
  <a href="https://tools.ietf.org/html/rfc4180#section-2">RFC-4180</a>.
  
  @param value The escaped CSV field which will be unescaped according to
  <a href="https://tools.ietf.org/html/rfc4180#section-2">RFC-4180</a>
  @return {@link CharSequence} the unescaped value if necessary, or the value unchanged