GVKun编程网logo

PHP 5.4抛出exception – 用ISO-8859-1编码的string消息看不到消息(php抛出异常)

13

在本文中,我们将给您介绍关于PHP5.4抛出exception–用ISO-8859-1编码的string消息看不到消息的详细内容,并且为您解答php抛出异常的相关问题,此外,我们还将为您提供关于com

在本文中,我们将给您介绍关于PHP 5.4抛出exception – 用ISO-8859-1编码的string消息看不到消息的详细内容,并且为您解答php抛出异常的相关问题,此外,我们还将为您提供关于com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但是STRING、Exception in thread "main" java.io.IOException: (null) entry in command string: null ch...、Exception.Message 与 Exception.ToString()、Failed to instantiate [引用 spring 配置文件的类]: Constructor threw exception; nested exception is java.l...的知识。

本文目录一览:

PHP 5.4抛出exception – 用ISO-8859-1编码的string消息看不到消息(php抛出异常)

PHP 5.4抛出exception – 用ISO-8859-1编码的string消息看不到消息(php抛出异常)

我最近在apt-get的Ubuntu 12.10上安装了PHP 5.4。

PHP信息显示:PHP版本5.4.6-1ubuntu1

我只是安装了所有常见的软件包,如MysqL,pgsql,curl等,没有做任何其他更改,但我有一个问题。

我喜欢在我的文件和数据库中使用ISO-8859-1 / latin1编码,因为这是我获得最佳工作stream程的地方。 现在我有一个问题,因为PHP似乎没有相处的消息以这种方式编码的exception。

使用python在cmd中打印UTF-8字符

为什么batch file中的特殊字符会打印为问号?

我如何base64编码在Linux上的string,使其匹配窗口“Unicode.GetBytes.ToBase64String”?

如何更改shell脚本字符编码?

字符编码,UTF或ANSI?

那么,为了更好地阐明它,我创build了一个如下所示的testing文件:

ini_set(''display_errors'',1); error_reporting(E_ALL); throw new Exception(''é'');

如果上面的代码是在utf-8文件中,那么一切正常,启用Xdegub我得到:

( ! ) Fatal error: Uncaught exception ''Exception'' with message ''é'' in /home/henrique/public/teste.PHP on line 5 ( ! ) Exception: é in /home/henrique/public/teste.PHP on line 5 Call Stack # Time Memory Function Location 1 0.0002 124212 {main}( ) ../teste.PHP:0

如果文件在ISO-8859-1中,如果启用了Xdebug,则问题只是消息不显示:

( ! ) Fatal error: in /home/henrique/public/teste.PHP on line 5 ( ! ) Exception: in /home/henrique/public/teste.PHP on line 5 Call Stack # Time Memory Function Location 1 0.0002 124436 {main}( ) ../teste.PHP:0

但是,没有Xdebug,我只能得到这个“非常明确”的信息:

Fatal error: in /home/henrique/public/teste.PHP on line 5

也许这是Apache的问题,因为当我使用命令行尝试相同的时候,我得到:

Stack trace: #0 {main} thrown in /home/henrique/public/teste.PHP on line 5 Fatal error: Uncaught exception ''Exception'' with message '' '' in /home/henrique/public/teste.PHP on line 5 Exception: in /home/henrique/public/teste.PHP on line 5 Call Stack: 0.0002 121256 1. {main}() /home/henrique/public/teste.PHP:0

消息仍然存在,然而,它是难以辨认的,但在那里…

编辑

我也试过Lighttpd 1.4.28,结果是一样的。

编辑2:

试用PHP 5.4内置服务器,并在我的terminal上得到这个:

[Wed Jun 5 21:32:08 2013] PHP Fatal error: Uncaught exception ''Exception'' with message '' '' in /var/www/test2.PHP:9 Stack trace: #0 {main} thrown in /var/www/test2.PHP on line 9 [Wed Jun 5 21:32:08 2013] 127.0.0.1:55116 [200]: /test2.PHP - Uncaught exception ''Exception'' with message '' '' in /var/www/test2.PHP:9 Stack trace: #0 {main} thrown in /var/www/test2.PHP on line 9

但在浏览器中,仍然是同样的问题。

写入文件时的UnicodeEncodeError

将string从Windows charset转换为Java中的UTF 8

使用MME和DirectMusic时的ANSI或OEM代码页?

奇怪的.bat文件的行为

从Windows和Linux读取文件会得到不同的结果(字符编码?)

在PHP中的异常消息是一个字符串 ,就像你没有消息。

PHP中的字符串是二进制的。 这实际上意味着PHP完全不关心其中的编码,PHP中的字符串只是保留了可以用二进制数据以八位字节表示的任何编码(即,8位形成单字节,然后是PHP字符串中的一个字符如果你使用子字符串访问像$string[10]来访问第11个字符 )。

因为所有这些事情都可以确保您编写消息,但是它将被传递到输出中。

所以唯一的区别是你如何显示输出。 假设你在那个异常消息字符串中使用了Latin-1编码,并通过你的apache服务器输出,然后在浏览器和你的浏览器中查看它(我们不关心目前为止的原因) UTF-8,你会看到问号 – diagmond / crystal: 。

如果终端显示为UTF-8,则同样适用于终端。

或者,如果将输出保存到文件中,然后在编辑器中将该文件打开为UTF-8编码。

那么如何解决? 对于您的浏览器,请查看浏览器的文档,告诉浏览器您正在浏览的网站应该显示哪种编码。 我所知道的每个浏览器都有一些菜单,您可以在其中指定它。 你使用的字符集是通用的,所以即使是旧的浏览器也是如此。

同样适用于终端。 您可以设置外壳的语言环境以及终端的编码。 请查阅您使用的shell的文档。

对于文本文件,我打赌你现在已经知道如何处理它了:检查你的编辑器提供了哪些选项。

需要注意的最后一点是:如果要正确分析服务器返回的请求包含异常消息输出,则需要使用浏览器的开发人员工具来使服务器的响应头可见。 您可能会看到以前的配置发生了变化(错误),说明编码为latin-1时内容为UTF-8编码。 如果您不想手动更改浏览器中的编码,请修复该错误。 为此,请参阅PHP文档和Web服务器的文档。

ab@PHP.net提出了一个解释:

https://bugs.PHP.net/bug.PHP?id=63426&edit=2

不能修复的原因很复杂,很简单。 从5.4开始,PHP的内部编码是UTF-8,之前是latin1。 其他一切几乎没有变化。

在HTML上下文中显示的每个错误消息都需要转换实体。 为此,使用与htmlspecialchars()中相同的功能。 在PHP 5.4之前,它被迫使用latin1,现在它被迫使用UTF8。 有每个设计。 将header()与content-type或default_charset一起使用只会影响内容类型标题的排列。

因此,您在latin1中使用错误文本,但是UTF-8将用于转换实体,并且会在第一个无效字符处死亡。 代码中的相关位置: http : //lxr.PHP.net/xref/PHP_5_4/main/main.c#1083 ,随后determine_charset()将为转换字符集提供UTF8。 这就是为什么你的口音字符被吞下的原因。 这就是为什么Hui不能重现这一点 – 如果你先看他的帖子,latin1确实是以内容类型发送的,但显然是使用了UTF-8编码的PHP脚本,所以错误信息是“致命错误:未捕获异常“异常”与消息''é''在…“。 但是,目前的情况并没有强制你使用UTF-8编写脚本,在用拉丁语编码的脚本中,你仍然可以使用utf8_encode(''é'')来引发异常。 它与CLI一起工作的原因是因为没有HTML实体必须被编码,所以字符被按原样传递给输出。

这一切实际上意味着这个问题一直存在,但它是有利于用户使用默认iso-8859-1。 现在使用默认UTF-8的用户可以获利。 通过查看代码来解决这个问题,可能需要更多的全球入侵,而不仅仅是这张票的需求。

对于htmlspecialchars()行为的变化,请参见bug#61354

你有没有在不同的服务器上试过这个?

我想是你的配置,我在我的服务器上创建了一个测试文件,你可以在这里查看http://cai.tlacaelelrl.com/tests/test.PHP

内容是

ini_set(''display_errors'',1); error_reporting(E_ALL); print ''Character encoding is: ''.mb_internal_encoding(); throw new Exception(''é'');

字符集应用于文件,我还将字符集添加到htaccess文件。

我不知道是不是因为xdebug,但是我不能用它启用测试。

你可以尝试添加这个

AddCharset ISO-8859-1 .PHP

到你的.htaccess文件

我有同样的问题,并没有找到一个好的解决方案(“AddCharset ISO-8859-1 .PHP”在.htaccess中不起作用)。 你可以使用这个:

抛出新的异常(htmlentities(''é'',ENT_COMPAT,''ISO-8859-1''));

但是Xdebug会显示:

à

总比没有好

总结

以上是小编为你收集整理的PHP 5.4抛出exception – 用ISO-8859-1编码的string消息看不到消息全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但是STRING

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但是STRING

这是我使用Gson进行序列化的第一种方法.我像这样回复了我的Android应用程序的facebook响应

我的Json:

 {"data": [
    {
        "pic_square": "https://fbcdn-profile-a.akamaihd.netxxxx1388091435_797626998_q.jpg",
        "uid": "10202xxx852765",
        "name": "Mister X"
    },
    {
        "pic_square": "https://fbcdn-profile-a.akamaihd.netxxxx1388091435_797626998_q.jpg",
        "uid": "10202xxx852765",
        "name": "Mister X"
    }
   ]
}



    try {
       final GsonBuilder builder = new GsonBuilder();
       final Gson gson = builder.create();
       JSONObject data= response.getGraphObject().getInnerjsonObject();             
       FacebookResponses facebookResponses= gson.fromJson(data.toString(),FacebookResponses.class); //exception here
       Log.i(TAG, "Result: " + facebookResponses.toString());
    } catch (JsonSyntaxException e) {
        e.printstacktrace();

}
我的课

public class FacebookResponses implements Serializable {
  private static final long serialVersionUID = 1L;
      @Serializedname("data");
      private FacebookRisp[] data;
}

class FacebookRisp implements Serializable {

    private static final long serialVersionUID = 1L;

   @Serializedname("pic_square")
   private String[] pic_square;

   @Serializedname("uid")
   private String[] uid;

   @Serializedname("name")
   private String[] name;

   public String[] getPic_square() {
        return pic_square;
   }

   public void setPic_square(String[] pic_square) {
    this.pic_square = pic_square;
   }

    public String[] getUid() {
    return uid;
   }

   public void setUid(String[] uid) {
    this.uid = uid;
   }

   public String[] getName() {
    return name;
   }

   public void setName(String[] name) {
    this.name = name;
   }

 }

我明白了
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY但在第1行第118列为STRING

更新:
我修改了爱琴海的答案,问题是[]

@Serializedname("pic_square")
private String**[]** pic_square;   //ex here and others

解决方法:

将您的FacebookResponses类更改为:

private class FacebookResponses {
    private Data[] data;
}

private class Data {
    @Serializedname("pic_square")
    private String picSquare;
    private String uid;
    private String name;
}

编辑:因为您的json响应的结构如下所示:

Exception in thread

Exception in thread "main" java.io.IOException: (null) entry in command string: null ch...

在https://github.com/vincentduan/hadoop-common-2.7.1-bin.git中下载hadoop.dll,并拷贝到c:\windows\system32目录中。

执行map reduce程序, 正常。

 

Exception.Message 与 Exception.ToString()

Exception.Message 与 Exception.ToString()

我有正在记录的代码Exception.Message。但是,我阅读了一篇文章,其中指出最好使用Exception.ToString().
使用后者,您可以保留有关错误的更多关键信息。

这是真的吗,继续替换所有代码日志记录是否安全Exception.Message

我还在为log4net使用基于 XML
的布局。是否Exception.ToString()可能包含可能导致问题的无效 XML 字符?

答案1

小编典典

Exception.Message仅包含与异常关联的消息 (doh)。例子:

你调用的对象是空的

Exception.ToString()方法将提供更详细的输出,包含异常类型、消息(来自之前的)、堆栈跟踪以及所有这些内容,用于嵌套/内部异常。更准确地说,该方法返回以下内容:

ToString 返回旨在被人类理解的当前异常的表示。如果异常包含文化敏感数据,则 ToString
返回的字符串表示需要考虑当前系统文化。尽管对返回字符串的格式没有确切的要求,但它应该尝试反映用户感知的对象的值。

ToString的默认实现获取抛出当前异常的类名、消息、内部异常调用ToString的结果、调用Environment.StackTrace的结果。如果这些成员中的任何一个是空引用(在
Visual Basic 中为 Nothing),则其值不包含在返回的字符串中。

如果没有错误消息或者是空字符串 (“”),则不返回错误消息。仅当内部异常的名称和堆栈跟踪不是空引用(在 Visual Basic 中为
Nothing)时才返回它们。

Failed to instantiate [引用 spring 配置文件的类]: Constructor threw exception; nested exception is java.l...

Failed to instantiate [引用 spring 配置文件的类]: Constructor threw exception; nested exception is java.l...

本人的继承类引用了 service 层的方法,用的注解方式是@Autowired

该注解如果在容器 tomcat 启动后引用后不会报错,不会报 java.lang.NullPointerException 错误。

初始化时如果想调用数据库的数据,而此时 service 层的类没有实例化,导致 tomcat 启动时报空指针错误。

解决办法:

@Component
public class MessageResource extends AbstractMessageSource implements ResourceLoaderAware
{
@Autowired
private TsLanguageTestService tsLanguageTestService;

private static MessageResource util;

/**
* Map切分字符
*/
protected final String MAP_SPLIT_CODE = "|";
private final Map<String, String> properties = new HashMap<String, String>();

/**
* 初始化数据,把数据库里的国际化都读入缓存的Map里
*/
@PostConstruct
public void init() {
util = this;
util.tsLanguageTestService = this.tsLanguageTestService;
}
}

主要是 init() 方法和@PostConstruct 注解,这样 tomcat 启动时就会把@Autowired注解的类实体化

 

今天的关于PHP 5.4抛出exception – 用ISO-8859-1编码的string消息看不到消息php抛出异常的分享已经结束,谢谢您的关注,如果想了解更多关于com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但是STRING、Exception in thread "main" java.io.IOException: (null) entry in command string: null ch...、Exception.Message 与 Exception.ToString()、Failed to instantiate [引用 spring 配置文件的类]: Constructor threw exception; nested exception is java.l...的相关知识,请在本站进行查询。

本文标签: