code: public String toUnicodeHostString() {
          if (!_is_hostname) {
              return toString();
          }
          
          try {
              StringBuilder buf = new StringBuilder();
  
              if (_scheme != null) {
                  buf.append(_scheme);
                  buf.append(':');
              }
              if (_is_net_path) {
                  buf.append("//");
                  if (_authority != null) { // has_authority
                      if (_userinfo != null) {
                          buf.append(_userinfo).append('@');
                      }
                      buf.append(IDNA.toUnicode(getHost()));
                      if (_port >= 0) {
                          buf.append(':').append(_port);
                      }
                  }
              }
              if (_opaque != null && _is_opaque_part) {
                  buf.append(_opaque);
              } else if (_path != null) {
                  // _is_hier_part or _is_relativeURI
                  if (_path.length != 0) {
                      buf.append(_path);
                  }
              }
              if (_query != null) { // has_query
                  buf.append('?');
                  buf.append(_query);
              }
              return buf.toString();
          } catch (URIException ex) {
              throw new RuntimeException(ex);
          }
      }
docs: In the case of a puny encoded IDN, this method returns the decoded Unicode version.
  <p>
  Most of this implementation is copied from {@link org.apache.commons.httpclient.URI#setURI()}.
  
  @return decoded IDN version of URI