在Java中是否有任何方法可以使Unicode与任何字符等效?例如
假设一种方法getUnicode(char c).getUnicode('÷')应该返回一个电话\u00f7.
我正在通过FileReader读取文件 - 该文件是UTF-8解码的(带有BOM)现在我的问题是:我读取文件并输出一个字符串,但遗憾的是BOM标记也输出了.为什么会这样?
fr = new FileReader(file);
br = new BufferedReader(fr);
String tmp = null;
while ((tmp = br.readLine()) != null) {
String text;
text = new String(tmp.getBytes(), "UTF-8");
content += text + System.getProperty("line.separator");
}
Run Code Online (Sandbox Code Playgroud)
第一行后的输出
?<style>
Run Code Online (Sandbox Code Playgroud) 我试图在Windows上用Java检查日志文件是否为空(意味着没有错误).到目前为止,我尝试过使用2种方法.
方法1(失败)
FileInputStream fis = new FileInputStream(new File(sLogFilename));
int iByteCount = fis.read();
if (iByteCount == -1)
System.out.println("NO ERRORS!");
else
System.out.println("SOME ERRORS!");
Run Code Online (Sandbox Code Playgroud)
方法2(失败)
File logFile = new File(sLogFilename);
if(logFile.length() == 0)
System.out.println("NO ERRORS!");
else
System.out.println("SOME ERRORS!");
Run Code Online (Sandbox Code Playgroud)
现在,当日志文件为空(没有内容)时,这些方法都会失败,但文件大小不为零(2个字节).
检查文件是否为空的最有效和最准确的方法是什么?我要求效率,因为我必须循环检查文件大小数千次.
注意:文件大小只会徘徊在几到10 KB左右!
方法3(失败)
按照@ Cygnusx1的建议,我也试过使用FileReader过,但没有成功.这是片段,如果有人感兴趣的话.
Reader reader = new FileReader(sLogFilename);
int readSize = reader.read();
if (readSize == -1)
System.out.println("NO ERRORS!");
else
System.out.println("SOME ERRORS!");
Run Code Online (Sandbox Code Playgroud) 我怎样才能读取所有一中BufferedReader的线,并存储为一个字符串?
val br = new BufferedReader(...)
val str: String = getAllLines(br) // getAllLines() -- is where I need help
Run Code Online (Sandbox Code Playgroud)
与此问题类似.
我需要有关从UTF-8文件中删除BOM的方法的建议,并创建其余xml文件的副本.
真的很简单的问题.我需要在Java程序中读取Unicode文本文件.
我习惯使用普通的ASCII文本与BufferedReader FileReader组合,这显然不起作用:(
我知道我可以使用Buffered Reader以"传统"方式读取字符串,然后使用以下内容进行转换:
temp = new String(temp.getBytes(), "UTF-16");
Run Code Online (Sandbox Code Playgroud)
但有没有办法将Reader包装在'转换器'中?
编辑:文件以FF FE开头
我正在使用一个框架,它会不时地返回带有"空"字符的格式错误的字符串.
例如,"foobar"表示为:[,f,o,o,b,a,r]
第一个字符不是空格(''),因此System.out.printlin()将返回"foobar"而不是"foobar".然而,String的长度是7而不是6.显然这使得大多数String方法(equals,split,substring,..)无用.有没有办法从字符串中删除空字符?
我试着像这样构建一个新的String:
StringBuilder sb = new StringBuilder();
for (final char character : malformedString.toCharArray()) {
if (Character.isDefined(character)) {
sb.append(character);
}
}
sb.toString();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.与以下代码相同:
StringBuilder sb = new StringBuilder();
for (final Character character : malformedString.toCharArray()) {
if (character != null) {
sb.append(character);
}
}
sb.toString();
Run Code Online (Sandbox Code Playgroud)
我也无法检查这样的空字符:
if (character == ''){
//
}
Run Code Online (Sandbox Code Playgroud)
显然字符串有问题..但我无法更改我正在使用的框架或等待它们修复它(如果它是框架中的错误).我需要处理这个String并对其进行sanatize.
有任何想法吗?
我正在尝试使用Apache的CXF库为WebService开发客户端应用程序.在此特定服务器实现中,当请求中缺少某些数据(例如,某人的ID号)时,它返回HTTP代码403(禁止),但是响应正文包含特定于应用程序的错误详细信息作为肥皂错误.
举个例子,这是我使用SoapUI收集的响应:
SEND_ENDING和POST_PROTOCOL,但似乎无法在Message给予该handleMessage()方法的参数中找到它.
我错过了什么?
这是我得到的异常和堆栈跟踪:
org.apache.cxf.interceptor.Fault: Could not send Message.
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:67)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:355)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:140)
at com.sun.proxy.$Proxy36.arquivo(Unknown Source)
at br.com.dgsistemas.TesteWS.main(TesteWS.java:133)
Caused by: org.apache.cxf.transport.http.HTTPException: HTTP response '403: Forbidden' when communicating with https://www.wsrestrito.caixa.gov.br/siies/WsSolicitacao
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.doProcessResponseCode(HTTPConduit.java:1620)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1627)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1572)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1373)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:673)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
... 9 more
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个带utf8编码的xml.此文件包含BOM作为文件的开头.所以在解析过程中我遇到了org.xml.sax.SAXParseException:prolog中不允许使用内容.我无法从文件中删除这3个字节.我无法将文件加载到内存中并在此处删除它们(文件很大).因此,出于性能原因,我正在使用SAX解析器,如果它们在""标记之前存在,则只想跳过这3个字节.我应该为此继承InputStreamReader吗?
我是java的新手 - 请告诉我正确的方法.