Java - 如何对非拉丁字符的 URL 路径进行编码

2023-12-03

目前有final URL url = new URL(urlString);但我遇到服务器不支持路径中的非 ASCII 的情况。

使用 Java (Android) 我需要对 URL 进行编码

http://acmeserver.com/download/agc/fcms/儿子去哪儿/儿子去哪儿.png

to

http://acmeserver.com/download/agc/fcms/%E5%84%BF%E5%AD%90%E5%8E%BB%E5%93%AA%E5%84%BF/%E5%84%BF%E5%AD%90%E5%8E%BB%E5%93%AA%E5%84%BF.png

就像浏览器一样。

我检查了URLEncoder.encode(s, "UTF-8");但它也编码/ slashes

http%3A%2F%2acmeserver.com%2Fdownload%2Fagc%2Ffcms%2F%E5%84%BF%E5%AD%90%E5%8E%BB%E5%93%AA%E5%84%BF%2F%E5%84%BF%E5%AD%90%E5%8E%BB%E5%93%AA%E5%84%BF.png

有没有办法简单地做到这一点而不解析该方法获取的字符串?

from http://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars

B.2.1 URI 属性值中的非 ASCII 字符 不包含非 ASCII 值(参见 [URI],第 2.1 节) 有时在需要 URI 的属性值中指定它们(即 用 %URI 定义;在 DTD 中)。例如,以下 href 值 是非法的:

<A href="http://foo.org/Håkon">...</A>

我们建议用户代理采用以下约定 在这种情况下处理非 ASCII 字符:

  1. 将 UTF-8 中的每个字符(参见 [RFC2279])表示为一个或多个 字节。
  2. 使用 URI 转义机制转义这些字节(即,通过 将每个字节转换为 %HH,其中 HH 是十六进制表示法 字节值)。

您应该只对特殊字符进行编码并将它们一起解析。如果您尝试对整个 URI 进行编码,那么您就会遇到问题。

坚持:

String query = URLEncoder.encode("apples oranges", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;

看看这个很棒的导游关于 URL 编码。

话虽这么说,一点点搜索表明可能还有其他方法可以实现您想要的功能:

尝试一下:

String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();

(您需要对这些空格进行编码,以便可以将其用于请求。)

这利用了 Android 中可用的几个功能 类。首先,URL 类可以将 url 分解为其正确的部分 组件,因此您无需进行任何字符串搜索/替换 工作。其次,这种方法利用了 URI 类 当您通过以下方式构建 URI 时,正确转义组件的功能 组件而不是单个字符串。

这种方法的优点在于您可以采用任何有效的 url 字符串 并让它工作,而无需您自己具备任何特殊知识。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java - 如何对非拉丁字符的 URL 路径进行编码 的相关文章

  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 如何使用 IF 检查 TextView 可见性

    我有一个 onCheckedChangeListener 来根据选择的单选按钮显示文本视图 我有 1 个疑问和 1 个难题 想知道是否有人可以帮助我 问题 您能否将单选组默认检查值设置为 否 单选按钮 以便一开始就不会检查任何内容 问题 如
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 如何默认在 ActionOpenDocument 意图中显示“内部存储”选项

    我需要用户选择一个自定义文件类型的文件 并将其从 Windows 文件资源管理器拖到 Android 设备上 但默认情况下内部存储选项不可用 当我使用以下命令启动意图时 var libraryIntent new Intent Intent
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • Android向menuItem添加子菜单,addSubMenu()在哪里?

    我想根据我的参数以编程方式将 OptionsMenu 内的子菜单添加到 menuItem 中 我检查了android sdk中的 MenuItem 没有addSubMenu 方法 尽管你可以找到 hasSubMenu 和 getSubMen
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 有没有办法在聚合物纸制品上显示韩文、日文或中文字符?

    我正在使用聚合物来开发我自己的应用程序 因为目标用户是亚洲人 所以我必须使用韩语 日语或中文字符 但是 它们无法正确显示 像这样 有办法解决这个问题吗 您需要在 Polymer 元素的 HTML 文件中指定编码 也可以看看我使用 Polym
  • 使用变量作为键访问对象值

    我尝试使用先前在 dart 中定义的变量来访问类值 但我不断收到错误the operator isn t defined for the class 在 Javascript 中 我将使用如下变量访问对象值 let movie movieT
  • 为 HTML5 select 添加搜索功能

  • ASP.NET Core 3.0 System.Text.Json 骆驼案例序列化

    在ASP NET Core 3 0 Web API项目中 如何指定系统 Text Json自动将 Pascal Case 属性序列化 反序列化为 Camel Case 的序列化选项 反之亦然 给定一个具有 Pascal Case 属性的模型
  • R 中的马赛克图帮助

    My current plot My desired plot nevermind the variables s 具体来说 解释变量在底部 x 轴 响应变量在右侧 相对频率和 y 轴在左侧 我将在下面附上我的 R 代码 mosaictab
  • Python pydantic,使祖先的每个字段都是可选的

    我有两节课 class UserCreate BaseModel avatar HttpUrl Field description Avatar example https picsum photos 200 name str Field
  • 在java中检查对象相等性而不覆盖 equals [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 java中是否有任何实用程序可以检查对象的相等性而无需equals压倒一切 由于某些原因 我不想为我的类提供 equals 方法 我需要类似的东西S
  • Electron 中具有本地资源的 iframe

    我需要渲染iframe在我的电子应用程序中 哪里的frm html链接本地文件脚本foo js这是我的电子应用程序的一部分 p Inside iframe p 当我
  • Android Https错误不受信任的服务器证书

    在我的情况下 当我在模拟器上运行程序时 它工作正常 但是当我将 apk 安装到手机时 出现错误 不受信任的服务器证书 问题是什么 我的 AsyncTask 的代码用于向服务器发送响应 public abstract class BaseAs
  • Google 电子表格从自己的 URL 读取参数

    我想打开一个带有一些参数的 Google 电子表格 我可以在 URL 中添加这几个参数来打开电子表格 然后在电子表格中将它们加载到某些单元格中吗 相关电子表格是私下共享的 使用 URL 的用户被授予编辑权限 Sandy Good 提供了一个
  • 谷歌云音译 API

    Google 确实提供翻译 API 文本转语音 API 但是是否有音译 API 可以显示罗马尼亚语文本中的发音 就像他们在谷歌翻译 例如 你好的发音是he l h l 对于不同的语言可能会有所不同 看来您正在寻找音译API但不幸的是它早已被
  • 如何计算 numpy 数组的行对之间的欧氏距离

    我有一个numpy数组如 import numpy as np a np array 1 0 1 0 1 1 0 0 1 0 1 0 0 0 1 1 我想计算一下euclidian distance每对行之间 from scipy spat
  • 对特定受众隐藏 Azure 表中的数据

    我在 Azure 中有一个资源组 其中包含云服务和存储帐户 我想向我的开发人员授予对资源组的访问权限 以便他们可以访问资源并进行更改 但是 存储帐户中有一个特定的表 其中包含敏感的用户详细信息 该表正在通过我们的客户端应用程序使用 SAS
  • 从 'int' 字符串获取 int 类型

    在Python中 给定字符串 int 我怎样才能得到type int Using getattr current module int 不起作用 int不是当前模块的命名空间的一部分 它是的一部分 builtins 命名空间 所以你会跑ge
  • Android 中的 WindowManager$BadTokenException

    首先 我很清楚发生此错误是因为我试图通过调用窗口 对话框Context那不是一个Activity 但就没有什么解决办法吗 我的要求是 我有一个Dialog在普通 JAVA 类的方法中使用自定义样式表 我想从任何地方调用该方法Activity
  • HTML5 视频标签上不需要的背景颜色/伪像

    我在我们即将推出的网站的登陆页面上使用了视频标签Levoma 我还使用 SublimeVideo 对我的视频进行一些额外的控制 ISSUE 自从我升级到最新版本 10 0 648 204 后 我在 Chrome 上看到了某种伪影 视频背景不
  • XQuery 返回错误..?

    下面是 XML 文件
  • C++:字符串运算符重载

    我可以重载现有类中的现有函数 运算符吗 我试图这样做 include
  • 单击导航抽屉即可关闭

    我已经实现了导航抽屉 但在使其正常运行时遇到一些问题 当我单击位置 1 或 2 时 它不会启动新片段 MainActivity java public class MainActivity extends Activity private
  • Java - 如何对非拉丁字符的 URL 路径进行编码

    目前有final URL url new URL urlString 但我遇到服务器不支持路径中的非 ASCII 的情况 使用 Java Android 我需要对 URL 进行编码 http acmeserver com download